灰度變換(反轉,對數,伽馬)的python實現

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章