Python数字图像处理流程及常见问题
作为本站的小编,我来为大家详细介绍Python数字图像处理的一些问题,包括对比度和亮度的调整,以及提供具体的实例。

skimage包的exposure模块
对于图像明亮度和对比度的调整,可以使用skimage包的exposure模块。
gamma调整
使用幂运算对原图像像素进行处理,得到新的像素值。可以通过设置gamma值来调整图像的明暗程度。
如果gamma>1,新图像比原图像暗;如果gamma<1,新图像比原图像亮。
函数格式为:skimage.exposure.adjust_gamma(image,gamma=1),其中gamma参数默认为1,原像不发生变化。
下面是一个调暗和调亮的实例:
from skimage import data,exposure,img_as_float
import matplotlib.pyplot as plt
image=img_as_float(data.moon())
gam1=exposure.adjust_gamma(image,2)#调暗
gam2=exposure.adjust_gamma(image,0.5)#调亮
plt.figure('adjust_gamma',figsize=(8,8))
plt.subplot(131)
plt.title('origin image')
plt.imshow(image,plt.cm.gray)
plt.axis('off')
plt.subplot(132)
plt.title('gamma=2')
plt.imshow(gam1,plt.cm.gray)
plt.axis('off')
plt.subplot(133)
plt.title('gamma=0.5')
plt.imshow(gam2,plt.cm.gray)
plt.axis('off')
plt.show()
log对数调整
与gamma相反,使用log函数进行调整。
函数格式为:skimage.exposure.adjust_log(image)
下面是一个对数调整的实例:
from skimage import data,exposure,img_as_float
import matplotlib.pyplot as plt
image=img_as_float(data.moon())
gam1=exposure.adjust_log(image)#对数调整
plt.figure('adjust_gamma',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(image,plt.cm.gray)
plt.axis('off')
plt.subplot(122)
plt.title('log')
plt.imshow(gam1,plt.cm.gray)
plt.axis('off')
plt.show()
判断图像对比度是否偏低
使用is_low_contrast(img)函数,返回一个bool型值。
from skimage import data,exposure
image=data.moon()
result=exposure.is_low_contrast(image)
print(result)
输出为false,表示图像对比度不偏低。
调整强度
使用rescale_intensity(image,in_range=’image’,out_range=’dtype’)函数进行调整。
in_range表示输入图片的强度范围,out_range表示输出图片的强度范围。默认情况下,输入图片的[min,max]范围被拉伸到[dtype.min,dtype.max]。
可以通过img_as_float()函数将unit8类型转换为float型,也可以直接乘以1.0实现类型转换。
下面是一些实例:
import numpy as np
from skimage import exposure
image=np.array([51,102,153],dtype=np.uint8)
mat=exposure.rescale_intensity(image)
print(mat)
输出为[0 127 255],即像素的最小值由51变为0,最大值由153变为255。整体进行了拉伸,但数据类型没有变,还是uint8。
import numpy as np
from skimage import exposure
image=np.array([51,102,153],dtype=np.uint8)
tmp=image*1.0
mat=exposure.rescale_intensity(tmp)
print(mat)
输出为[0. 0.5 1.],即像素的范围被拉伸到[0,1]。
import numpy as np
from skimage import exposure
image=np.array([51,102,153],dtype=np.uint8)
tmp=image*1.0
mat=exposure.rescale_intensity(tmp,in_range=(0,255))
print(mat)
输出为[0.2 0.4 0.6],即原像素值被除以255。
如果想等比例缩小,可以使用in_range参数;如果想将图像中的负数调整到正数范围内,可以使用out_range参数。
希望这篇文章可以对图像处理感兴趣的朋友提供一些帮助。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6813.html
