摘要:本文主要講解灰度線性變換,
本文分享自華為云社區《[Python影像處理] 十五.影像的灰度線性變換》,作者: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+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()
其輸出結果如下圖所示,影像的所有灰度值上移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.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)
其輸出結果如下圖所示,影像的所有灰度值增強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.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()
其輸出結果如下圖所示,影像的所有灰度值減弱,影像變得更暗,
五.影像灰度反色變換
反色變換又稱為線性灰度求補變換,它是對原影像的像素值進行反轉,即黑色變為白色,白色變為黑色的程序,其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-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()
其輸出結果如下圖所示,影像處理前后的灰度值是互補的,
影像灰度反色變換在醫學影像處理中有一定的應用,如下圖所示:
PS:文章參考自己以前系列影像處理文章及OpenCV庫函式,同時參考如下文獻:
- 楊秀璋等. 基于苗族服飾的影像銳化和邊緣提取技術研究[J]. 現代計算機,2018(10).
- 《數字影像處理》(第3版),岡薩雷斯著,阮秋琦譯,電子工業出版社,2013年.
- 《數字影像處理學》(第3版),阮秋琦,電子工業出版社,2008年,北京.
- 《OpenCV3編程入門》,毛星云,冷雪飛,電子工業出版社,2015.
- [數字影像處理] 五.MFC影像點運算之灰度線性變化、灰度非線性變化、閾值化和均衡化處理詳解
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/502900.html
標籤:其他
上一篇:JSP基礎知識總結
下一篇:冪等公共組件
