Python与FPGA——gamma变换

本文介绍了gamma变换的原理,利用Python和numpy实现gamma映射函数,模拟人眼对光线的敏感性。通过示例展示了gamma曲线和变化率,以及如何将灰度图像进行gamma变换以增强视觉效果。
摘要由CSDN通过智能技术生成


前言

  图像增强章节除了指数增强部分使用FPGA实现,剩下的直方图均衡,gamma映射都只使用Python实现,我们只需要知道原理即可,感兴趣的小伙伴可以在最后使用我们的FPGA项目实现。我们先讨论gamma变换。人的眼睛在光线暗的时候对亮的光很敏感,在光线明亮的地方对光没有那么敏感。比如在夜晚看到萤火虫和白天看到萤火虫完全是两个效果。为了符合人眼的这一特点就有了gamma变换。


一、gamma变换原理

V o u t = 255 25 5 g a m m a V i n g a m m a V_{out} = \frac{255}{255^{gamma}} V_{in}^{gamma} Vout=255gamma255Vingamma

gamma = 1 / 2.2
x = np.arange(0, 256)
y1 = (255 / (255) ** gamma) * x ** gamma#根据上面公式
y2 = np.zeros((256, 1))
for i in range(y2.shape[0] - 1):
    if(i == 0):
        y2[i] = 0
    else:
        y2[i] = (y1[i + 1] - y1[i]) / y1[i]#变化率
fig = plt.figure(figsize=(10, 4))
plt.subplot(121)
plt.title("gamma curve")
plt.plot(x, y1)
plt.subplot(122)
plt.title("variation rate")
plt.plot(x[1:], y2[1:, 0])#第一个像素(0位置)的变化不用画出

在这里插入图片描述
  gamma curve中描述的是每个像素值的gamma映射。可以从variation rate图像中可以看到像素的变化率,越黑的像素变化率越大,越白的像素的变化率越小,符合前言中我们聊的人眼的特点。

二、Python gamma变换

gamma = 1 / 2.2#gamma值
def gamma_transformer(pixel, gamma):#gamma变换
    return (255 / (255 ** gamma)) * pixel ** gamma
vectorize_function = np.vectorize(gamma_transformer)#调用numpy vectorize函数对每个像素进行映射
result = vectorize_function(gray, gamma)
plt.figure(figsize=(10, 6))
plt.subplot(121)
plt.title("raw image")
plt.imshow(gray, cmap='gray')
plt.subplot(122)
plt.title("gamma image")
plt.imshow(result, cmap="gray")

在这里插入图片描述


总结

  虽然没有FPGA实现,但是读者们可以先思考怎么去实现。接下来讲直方图均衡,敬请期待。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值