這是學習第三章的時候的灰度變換的知識,就是找一個函數對原圖像的每個像素點的灰度值重新計算,得到一個新得圖像。
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()