Python圖像運算之圖像灰度線性變換詳解
一.灰度線性變換
圖像的灰度線性變換是通過建立灰度映射來調整原始圖像的灰度,從而改善圖像的質量,凸顯圖像的細節(jié),提高圖像的對比度?;叶染€性變換的計算公式如(12-1)所示:

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

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

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

四.圖像對比度減弱變換
該算法將減弱圖像的對比度,Python實現代碼如下所示。
DB=DA×0.8
# -*- coding: utf-8 -*-
# By:Eastmount
import cv2
import numpy as np
import matplotlib.pyplot as plt
#讀取原始圖像
img = cv2.imread('luo.png')
#圖像灰度轉換
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#獲取圖像高度和寬度
height = grayImage.shape[0]
width = grayImage.shape[1]
#創(chuàng)建一幅圖像
result = np.zeros((height, width), np.uint8)
#圖像對比度減弱變換 DB=DA×0.8
for 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()
其輸出結果如圖12-4所示,圖像的所有灰度值減弱,圖像變得更暗。

五.圖像灰度反色變換
反色變換又稱為線性灰度求補變換,它是對原圖像的像素值進行反轉,即黑色變?yōu)榘咨?,白色變?yōu)楹谏倪^程。
DB=255-DA
其Python實現代碼如下所示:
# -*- coding: utf-8 -*-
# By:Eastmount
import cv2
import numpy as np
import matplotlib.pyplot as plt
#讀取原始圖像
img = cv2.imread('luo.png')
#圖像灰度轉換
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#獲取圖像高度和寬度
height = grayImage.shape[0]
width = grayImage.shape[1]
#創(chuàng)建一幅圖像
result = np.zeros((height, width), np.uint8)
#圖像灰度反色變換 DB=255-DA
for 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()
其輸出結果如圖12-5所示,圖像處理前后的灰度值是互補的。

圖像灰度反色變換在醫(yī)學圖像處理中有一定的應用,如圖12-6所示:

六.總結
本文主要講解圖像灰度線性變換,包括圖像灰度上移、圖像對比度增強變換、圖像對比度減弱變換和圖像灰度反色變換。希望大家一定要自己實現文章中的代碼,更好地提升編程能力。
到此這篇關于Python圖像運算之圖像灰度線性變換詳解的文章就介紹到這了,更多相關Python圖像灰度線性變換內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決Jupyter Notebook使用parser.parse_args出現錯誤問題
這篇文章主要介紹了解決Jupyter Notebook使用parser.parse_args出現錯誤問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
python 多進程并行編程 ProcessPoolExecutor的實現
這篇文章主要介紹了python 多進程并行編程 ProcessPoolExecutor的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10
python 篩選數據集中列中value長度大于20的數據集方法
今天小編就為大家分享一篇python 篩選數據集中列中value長度大于20的數據集方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
Python Diagrams庫以代碼形式生成云系統(tǒng)架構圖實例詳解
這篇文章主要介紹了Python Diagrams庫以代碼形式生成云系統(tǒng)架構圖實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01

