数字图像处理/对比拉伸
低对比度的图像可由照明不足, 成像传感器动态范围太小, 甚至在图像获取过程中透镜光圈设置错误引起. 对比拉伸的思想是提高图像处理时灰度级的动态范围.
转换函数
假设原图所有像素灰度最小值为 min, 最大值为 max, 则任一像素点 x 经过对比拉伸后的灰度值 s 为
s = (x - min) / (max - min) * 255
该函数将原图像的像素灰度范围从 [min, max] 拉伸至 [0, 255].
代码实现
import PIL.Image
import scipy.misc
import numpy as np
def convert_2d(r):
rmin = np.min(r)
rmax = np.max(r)
if rmin == rmax:
return r
s = np.empty(r.shape, dtype=np.uint8)
for j in range(r.shape[0]):
for i in range(r.shape[1]):
s[j][i] = (r[j][i] - rmin) / (rmax - rmin) * 255
return s
def convert_3d(r):
s_dsplit = []
for d in range(r.shape[2]):
rr = r[:, :, d]
ss = convert_2d(rr)
s_dsplit.append(ss)
s = np.dstack(s_dsplit)
return s
im = PIL.Image.open('/img/jp.jpg')
im_mat = np.asarray(im)
im_converted_mat = convert_3d(im_mat)
im_converted = PIL.Image.fromarray(im_converted_mat)
im_converted.show()