灰度图像线性变换非线性变换,python灰度图转换成二值图像
本文主要讲解灰度的线性变换。希望基础知识对你有帮助。
本文由eastmount分享自华为云社区《[Python图像处理] 十六.图像的灰度非线性变换之对数变换、伽马变换》。
本文主要讲解非线性变换,并使用自定义方法对灰度图像进行处理,包括对数变换和伽玛变换。
一、图像灰度的非线性变换图像灰度的非线性变换主要有对数变换、幂变换、指数变换、分段函数变换。通过非线性关系处理图像的灰度。下面主要解释三种常见的灰度非线性变换。
原始图像的灰度值按照公式DB=DADA/255进行非线性变换,其代码如下:
# -*-编码:utf-8 -*-
导入cv2
将numpy作为np导入
将matplotlib.pyplot作为plt导入
#阅读原文图片
img=cv2.imread(miao.png )
#图像灰度转换
grayImage=cv2.cvtColor(img,cv2。COLOR_BGR2GRAY)
#获取图像的高度和宽度
height=grayImage.shape[0]
width=grayImage.shape[1]
#创建图像
result=np.zeros((高度,宽度),np.uint8)
#图像灰度的非线性变换:DB=DADA/255
对于范围内的I(高度):
对于范围内的j(宽度):
gray=int(grayImage[i,j])*int(grayImage[i,j])/255
结果[i,j]=np.uint8(灰色)
#显示图像
cv2.imshow(灰度图像,灰度图像)
cv2.imshow(Result ,结果)
#等待显示
cv2.waitKey(0)
2.图像cv2.destroyAllWindows()的灰度非线性变换的输出结果如下图所示:
2.图像灰度的对数变换图像灰度的对数变换一般用公式表示:
其中C是比例比较常数,DA是原始图像灰度值,DB是变换后的目标灰度值。如下图所示,是对数曲线下灰度值的变化。
因为对数曲线在像素值低的区域斜率大,在像素值高的区域斜率小,所以图像对数变换后暗区的对比度会有所提高。这种变换可以用来增强图像的暗细节,从而扩展压缩后的高值图像中的暗像素。
对数变换可以扩展低灰度值,压缩高灰度值,广泛应用于光谱图像的显示。典型的应用是傅里叶频谱,其动态范围可能宽至0 ~ 106。直接显示光谱时,图像显示设备的动态范围往往达不到要求,从而丢失了很多暗部细节。但经过对数变换后,图像的动态范围被非线性压缩,从而可以清晰显示。下图中,对数变换后,未变换的光谱增加了低灰度区域的对比度,从而增强了暗区的细节。
下面的代码实现了图像灰度的对数变换。
# -*-编码:utf-8 -*-
将numpy作为np导入
将matplotlib.pyplot作为plt导入
导入cv2
#画一条曲线
定义log_plot(c):
x=np.arange(0,256,0.01)
y=c * np.log(1 x)
plt.plot(x,y, r ,线宽=1)
PLT . RC params[ font . sans-serif ]=[ sim hei ]#中文标签正常显示。
Plt.title(u 对数变换函数)
plt.xlim(0,255),plt.ylim(0,255)
plt.show()
#对数变换
定义日志(c,img):
输出=c * np.log(1.0 img)
输出=np.uint8(输出0.5)
返回输出
#阅读原文图片
img=cv2.imread(test.png )
#绘制对数变换曲线
log_plot(42)
#图像灰度对数变换
输出=log(42,img)
#显示图像
cv2.imshow(Input ,img)
cv2.imshow(Output ,输出)
cv2.waitKey(0)
2.cv2.destroyAllWindows()下图是对数函数处理后的效果图。对数变换对低对比度、低灰度值的图像有较好的增强效果。
相应的对数函数曲线如图所示。
三。图像灰度的伽玛变换伽玛变换又称指数变换或幂变换,是另一种常用的灰度非线性变换。图像灰度级的伽马变换的一般表达式如公式所示:
1时,图像中灰度较高的区域会被拉伸,灰度较低的部分会被压缩。 1时,图像中灰度较低的区域会被拉伸,灰度较高的部分会被压缩。当=1时,灰度变换是线性的,原始图像以线性方式改变。Python实现图像灰度的伽玛转换代码如下,主要通过调用幂函数实现。
# -*-编码
将matplotlib.pyplot作为plt导入
导入cv2
#画一条曲线
定义伽玛曲线(c,v):
x=np.arange(0,256,0.01)
y=c*x**v
plt.plot(x,y, r ,线宽=1)
PLT . RC params[ font . sans-serif ]=[ sim hei ]#中文标签正常显示。
Plt.title(u 伽玛变换函数)
plt.xlim([0,255]),plt.ylim([0,255])
plt.show()
#伽玛变换
定义伽玛(毫克,摄氏度,伏):
lut=np.zeros(256,dtype=np.float32)
对于范围内的I(256):
lut[i]=c * i ** v
Output_img=cv2。像素灰度值的LUT(img,lut) #映射
output _ img=NP . uint 8(output _ img 0.5)
返回output_img
#阅读原文图片
img=cv2.imread(test.png )
#绘制伽玛变换曲线
伽玛曲线(0.00000005,4.0)
#图像灰度伽玛变换
输出=伽玛(img,0.00000005,4.0)
#显示图像
cv2.imshow(输入,img)
cv2.imshow(Output ,输出)
cv2.waitKey(0)
2.cv2.destroyAllWindows()下图是伽玛变换后的效果。当图像的对比度较低且整体亮度值较高时(或由于相机曝光过度),伽马变换对图像增强有明显的效果。
对应的幂律函数曲线如图所示。
第一时间点击了解华为云鲜技术~
原创作品来自华为云开发者联盟,
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。