这是学习第三章的时候的灰度变换的知识,就是找一个函数对原图像的每个像素点的灰度值重新计算,得到一个新得图像。
1. 图像反转
一幅图像的灰度级范围为[0,L-1],那么反转函数是 s = L-1-r (原来黑的变亮,亮的变黑)
from skimage import io
import numpy as np
img = io.imread('11.jpg',as_gray = True)
rows,cols = img.shape
max1 = img.max()
emptyImage = np.zeros((rows,cols))
for i in range(rows):
for j in range(cols):
emptyImage[i,j] = max1 - img[i,j]
print(emptyImage.max(),emptyImage.min())
io.imshow(emptyImage)
io.show()
2. 对数变换
对数变换 s = c*log(1+r) c是常数
该变换将输入中范围较窄的诋灰度值映射为输出中范围较宽的灰度值,或将输入中范围较宽的高灰度值映射为输出中范围较窄的灰度值,我们使用这种类型的变换来扩展图像的暗像素,同时压缩更高灰度级的值。反对数变换的作用与此相反。
from skimage import io,data
import numpy as np
import math
def function(img,c):
rows,cols,dims = img.shape
emptyImage = np.zeros((rows,cols,dims),np.uint8)
max1 = img.max()
print(max1)
for m in range(dims):
for i in range(rows):
for j in range(cols):
r = img[i,j,m]
#重新量化
emptyImage[i,j,m] = ((c*math.log(1 + r) - c*math.log(1 + 0))/\
(c*math.log(1 + max1) - c*math.log(1 + 0))) * max1
return emptyImage
if __name__ == '__main__':
img = io.imread('11.jpg')
result = function(img,1)
io.imshow(result)
io.show()
3. 伽马变换
c和γ为正常数,对于不同的γ将产生不同的效果
from skimage import io,data
import numpy as np
import math
def function(img,c,gamma):
rows,cols,dims = img.shape
emptyImage = np.zeros((rows,cols,dims),np.uint8)
max1 = img.max()
for m in range(dims):
for i in range(rows):
for j in range(cols):
r = img[i,j,m]
emptyImage[i,j,m] = math.pow(r/max1,gamma)*max1
return emptyImage
if __name__ == '__main__':
img = io.imread('11.jpg')
result = function(img,1,1.5)
io.imshow(result)
io.show()