该方法的灰度值等于彩色图像R、G、B三个分量中的最大值
for i in range(height):
for j in range(width):
#获取图像R G B最大值
gray = max(img[i,j][0], img[i,j][1], img[i,j][2])
#灰度图像素赋值 gray=max(R,G,B)
grayimg[i,j] = np.uint8(gray)
for i in range(height):
for j in range(width):
#灰度值为RGB三个分量的平均值
gray = (int(img[i,j][0]) + int(img[i,j][1]) + int(img[i,j][2])) / 3
grayimg[i,j] = np.uint8(gray)
for i in range(height):
for j in range(width):
#灰度加权平均法
gray = 0.30 * img[i,j][0] + 0.59 * img[i,j][1] + 0.11 * img[i,j][2]
grayimg[i,j] = np.uint8(gray)
图像的灰度线性变换是通过建立灰度映射来调整原始图像的灰度,从而改善图像的质量,凸显图像的细节,提高图像的对比度。
该公式中DB表示灰度线性变换后的灰度值,DA表示变换前输入图像的灰度值,α和b为线性变换方程f(D)的参数,分别表示斜率和截距。
当α=1,b=0时,保持原始图像
当α=1,b!=0时,图像所有的灰度值上移或下移
当α=-1,b=255时,原始图像的灰度值反转
当α>1时,输出图像的对比度增强
当0<α<1时,输出图像的对比度减小
当α<0时,原始图像暗区域变亮,亮区域变暗,图像求补
for i in range(height):
for j in range(width):
if (int(grayImage[i,j]+50) > 255):
gray = 255
else:
gray = int(grayImage[i,j]+50)
result[i,j] = np.uint8(gray)
图像的所有灰度值上移50,图像变得更白了。注意,纯黑色对应的灰度值为0,纯白色对应的灰度值为255。
for i in range(height):
for j in range(width):
if (int(grayImage[i,j]*1.5) > 255):
gray = 255
else:
gray = int(grayImage[i,j]*1.5)
result[i,j] = np.uint8(gray)
图像的所有灰度值增强1.5倍。
for i in range(height):
for j in range(width):
gray = int(grayImage[i,j]*0.8)
result[i,j] = np.uint8(gray)
图像的所有灰度值减弱,图像变得更暗。
for i in range(height):
for j in range(width):
gray = 255 - grayImage[i,j]
result[i,j] = np.uint8(gray)
图像处理前后的灰度值是互补的。
DB=DA×DA/255
for i in range(height):
for j in range(width):
gray = int(grayImage[i,j])*int(grayImage[i,j]) / 255
result[i,j] = np.uint8(gray)
其中c为尺度比较常数,DA为原始图像灰度值,DB为变换后的目标灰度值。
def log(c, img):
output = c * np.log(1.0 + img)
output = np.uint8(output + 0.5)
return output
对数变换对于整体对比度偏低并且灰度值偏低的图像增强效果较好。
当γ>1时,会拉伸图像中灰度级较高的区域,压缩灰度级较低的部分。
当γ<1时,会拉伸图像中灰度级较低的区域,压缩灰度级较高的部分。
当γ=1时,该灰度变换是线性的,此时通过线性方式改变原图像。