Python圖像處理之圖像的灰度線(xiàn)性變換
一.圖像灰度線(xiàn)性變換原理
圖像的灰度線(xiàn)性變換是通過(guò)建立灰度映射來(lái)調(diào)整原始圖像的灰度,從而改善圖像的質(zhì)量,凸顯圖像的細(xì)節(jié),提高圖像的對(duì)比度。
灰度線(xiàn)性變換的計(jì)算公式如下所示:

該公式中DB表示灰度線(xiàn)性變換后的灰度值,DA表示變換前輸入圖像的灰度值,α和b為線(xiàn)性變換方程f(D)的參數(shù),分別表示斜率和截距。
- 當(dāng)α=1,b=0時(shí),保持原始圖像
- 當(dāng)α=1,b!=0時(shí),圖像所有的灰度值上移或下移
- 當(dāng)α=-1,b=255時(shí),原始圖像的灰度值反轉(zhuǎn)
- 當(dāng)α>1時(shí),輸出圖像的對(duì)比度增強(qiáng)
- 當(dāng)0<α<1時(shí),輸出圖像的對(duì)比度減小
- 當(dāng)α<0時(shí),原始圖像暗區(qū)域變亮,亮區(qū)域變暗,圖像求補(bǔ)
如圖所示,顯示了圖像的灰度線(xiàn)性變換對(duì)應(yīng)的效果圖:

二.圖像灰度上移變換
該算法將實(shí)現(xiàn)圖像灰度值的上移,從而提升圖像的亮度,其實(shí)現(xiàn)代碼如下所示。由于圖像的灰度值位于0至255區(qū)間之內(nèi),所以需要對(duì)灰度值進(jìn)行溢出判斷。
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt
#讀取原始圖像
img = cv2.imread('miao.png')
#圖像灰度轉(zhuǎn)換
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()其輸出結(jié)果如下圖所示,圖像的所有灰度值上移50,圖像變得更白了。注意,純黑色對(duì)應(yīng)的灰度值為0,純白色對(duì)應(yīng)的灰度值為255。

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

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

五.圖像灰度反色變換
反色變換又稱(chēng)為線(xiàn)性灰度求補(bǔ)變換,它是對(duì)原圖像的像素值進(jìn)行反轉(zhuǎn),即黑色變?yōu)榘咨咨優(yōu)楹谏倪^(guò)程。其Python實(shí)現(xiàn)代碼如下所示:
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt
#讀取原始圖像
img = cv2.imread('miao.png')
#圖像灰度轉(zhuǎn)換
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()其輸出結(jié)果如下圖所示,圖像處理前后的灰度值是互補(bǔ)的。

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

到此這篇關(guān)于Python圖像處理之圖像的灰度線(xiàn)性變換的文章就介紹到這了,更多相關(guān)Python圖像線(xiàn)性變換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python強(qiáng)大的hook函數(shù)使用及應(yīng)用場(chǎng)景
鉤子函數(shù)(hook function)是把我們自己實(shí)現(xiàn)的hook函數(shù)在某一時(shí)刻掛接到目標(biāo)掛載點(diǎn)上,這篇文章主要介紹了python強(qiáng)大的hook函數(shù)使用及應(yīng)用場(chǎng)景,需要的朋友可以參考下2023-05-05
基于Python實(shí)現(xiàn)四維圖像繪制系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何基于Python語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的四維圖像繪制系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-09-09
Python進(jìn)階學(xué)習(xí)之帶你探尋Python類(lèi)的鼻祖-元類(lèi)
這篇文章主要介紹了Python進(jìn)階學(xué)習(xí)之帶你探尋Python類(lèi)的鼻祖-元類(lèi),文中有非常詳細(xì)的解釋,對(duì)正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05
Python 網(wǎng)頁(yè)解析HTMLParse的實(shí)例詳解
這篇文章主要介紹了Python 網(wǎng)頁(yè)解析HTMLParse的實(shí)例詳解的相關(guān)資料,python里提供了一個(gè)簡(jiǎn)單的解析模塊HTMLParser類(lèi),使用起來(lái)也是比較簡(jiǎn)單的,解析語(yǔ)法沒(méi)有用到XPath類(lèi)似的簡(jiǎn)潔模式,需要的朋友可以參考下2017-08-08
python DataFrame轉(zhuǎn)dict字典過(guò)程詳解
這篇文章主要介紹了python DataFrame轉(zhuǎn)dict字典過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12

