[Python圖像處理] 十五.圖像的灰度線性變換
VSole2022-12-14 10:04:43
學Python近八年,認識了很多大佬和朋友,感恩。深知自己很菜,得拼命努力前行,編程也沒有什么捷徑,干就對了。希望未來能更透徹學習和撰寫文章,同時非常感謝參考文獻中的大佬們的文章和分享,共勉。
- https://blog.csdn.net/eastmount
一.圖像灰度線性變換原理
圖像的灰度線性變換是通過建立灰度映射來調整原始圖像的灰度,從而改善圖像的質量,凸顯圖像的細節,提高圖像的對比度。灰度線性變換的計算公式如下所示:

該公式中DB表示灰度線性變換后的灰度值,DA表示變換前輸入圖像的灰度值,α和b為線性變換方程f(D)的參數,分別表示斜率和截距。
- 當α=1,b=0時,保持原始圖像
- 當α=1,b!=0時,圖像所有的灰度值上移或下移
- 當α=-1,b=255時,原始圖像的灰度值反轉
- 當α>1時,輸出圖像的對比度增強
- 當0<α<1時,輸出圖像的對比度減小
- 當α<0時,原始圖像暗區域變亮,亮區域變暗,圖像求補
如圖所示,顯示了圖像的灰度線性變換對應的效果圖。

二.圖像灰度上移變換
該算法將實現圖像灰度值的上移,從而提升圖像的亮度,其實現代碼如下所示。由于圖像的灰度值位于0至255區間之內,所以需要對灰度值進行溢出判斷。
# -*- coding: utf-8 -*-import cv2 import numpy as np import matplotlib.pyplot as plt
#讀取原始圖像img = cv2.imread('miao.png')
#圖像灰度轉換grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#獲取圖像高度和寬度height = grayImage.shape[0]width = grayImage.shape[1]
#創建一幅圖像result = np.zeros((height, width), np.uint8)
#圖像灰度上移變換 DB=DA+50for 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)
#顯示圖像cv2.imshow("Gray Image", grayImage)cv2.imshow("Result", result)
#等待顯示cv2.waitKey(0)cv2.destroyAllWindows()
其輸出結果如下圖所示,圖像的所有灰度值上移50,圖像變得更白了。注意,純黑色對應的灰度值為0,純白色對應的灰度值為255。

三.圖像對比度增強變換
該算法將增強圖像的對比度,Python實現代碼如下所示:
# -*- coding: utf-8 -*-import cv2 import numpy as np import matplotlib.pyplot as plt
#讀取原始圖像img = cv2.imread('miao.png')
#圖像灰度轉換grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#獲取圖像高度和寬度height = grayImage.shape[0]width = grayImage.shape[1]
#創建一幅圖像result = np.zeros((height, width), np.uint8)
#圖像對比度增強變換 DB=DA*1.5for 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)
#顯示圖像cv2.imshow("Gray Image", grayImage)cv2.imshow("Result", result)
其輸出結果如下圖所示,圖像的所有灰度值增強1.5倍。

四.圖像對比度減弱變換
該算法將減弱圖像的對比度,Python實現代碼如下所示:
# -*- coding: utf-8 -*-import cv2 import numpy as np import matplotlib.pyplot as plt
#讀取原始圖像img = cv2.imread('miao.png')
#圖像灰度轉換grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#獲取圖像高度和寬度height = grayImage.shape[0]width = grayImage.shape[1]
#創建一幅圖像result = np.zeros((height, width), np.uint8)
#圖像對比度減弱變換 DB=DA*0.8for i in range(height): for j in range(width): gray = int(grayImage[i,j]*0.8) result[i,j] = np.uint8(gray)
#顯示圖像cv2.imshow("Gray Image", grayImage)cv2.imshow("Result", result)
#等待顯示cv2.waitKey(0)cv2.destroyAllWindows()
其輸出結果如下圖所示,圖像的所有灰度值減弱,圖像變得更暗。

五.圖像灰度反色變換
反色變換又稱為線性灰度求補變換,它是對原圖像的像素值進行反轉,即黑色變為白色,白色變為黑色的過程。其Python實現代碼如下所示:
# -*- coding: utf-8 -*-import cv2 import numpy as np import matplotlib.pyplot as plt
#讀取原始圖像img = cv2.imread('miao.png')
#圖像灰度轉換grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#獲取圖像高度和寬度height = grayImage.shape[0]width = grayImage.shape[1]
#創建一幅圖像result = np.zeros((height, width), np.uint8)
#圖像灰度反色變換 DB=255-DAfor i in range(height): for j in range(width): gray = 255 - grayImage[i,j] result[i,j] = np.uint8(gray)
#顯示圖像cv2.imshow("Gray Image", grayImage)cv2.imshow("Result", result)
#等待顯示cv2.waitKey(0)cv2.destroyAllWindows()
其輸出結果如下圖所示,圖像處理前后的灰度值是互補的。

圖像灰度反色變換在醫學圖像處理中有一定的應用,如下圖所示:

寫到這里,這篇文章就介紹結束。希望文章對大家有所幫助,如果有錯誤或不足之處,還請海涵。文章寫于連續奔波考博,經歷的事情太多,有喜有悲,需要改變自己好好對家人,也希望讀者與我一起加油。
VSole
網絡安全專家