python全局灰度線性變換——自由設定圖像灰度范圍


全局線性變換的公式是s = (r-a)*(d-c)/(b-a)+c,其中a、b是原圖片的灰度最小值和最大值,c、d是變換后的灰度值的最小值和最大值。r是當前像素點的灰度值,s是當前像素點變換后的灰度值。該公式可自己畫出一個坐標,利用相似三角形性質可輕易得出。所以只要我們得到一個圖片的灰度范圍,我們就可以自由變換到指定的灰度范圍,這種灰度變換也是圖像增強的一部分。下面的示例能清晰看出變換后的效果。除了圖片的直觀顯示,我們還可以畫出其變換前后的直方圖來看出其差異。

代碼如下:

import cv2
import matplotlib.pyplot as plt
# 統計各灰度值的像素個數
def histogram(image):
    (row, col) = image.shape
    hist = [0]*256
    for i in range(row):
        for j in range(col):
            hist[image[i,j]] +=1
    return hist

#全局灰度線性變換
def global_linear_transmation(img): #將灰度范圍設為0~255
    maxV=img.max()
    minV=img.min()
    for i in range(img.shape[0]):
        for j in range(img.shape[1]):
            img[i,j] = ((img[i,j]-minV)*255)/(maxV-minV)
    return img

image0 = cv2.imread("rice.tif",0)
plt.figure()
plt.subplot(2,2,1)
#使用matplotlib中的imshow顯示圖像,注意參數的含義,不加參數試試
plt.imshow(image0,vmin=0, vmax=255,cmap = plt.cm.gray)
plt.title('original image')
image_hist0 = histogram(image0)
plt.subplot(2,2,2)
plt.plot(image_hist0)

image1=global_linear_transmation(image0)
plt.subplot(2,2,3)
plt.imshow(image1,vmin=0, vmax=255,cmap = plt.cm.gray)
image_hist1 = histogram(image1)#統計變換后圖像的各灰度值像素的個數
plt.subplot(2,2,4)
plt.plot(image_hist1)
plt.show()

效果圖如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM