參考的一些文章以及論文我都會給大家分享出來 —— 文章鏈接就貼在原文,論文我上傳到資源中去,大家可以免費下載學習,如果當天資源區找不到論文,那就等等,可能正在審核,審核完后就可以下載了,大家一起學習,一起進步!加油!!
目錄
1. 影像增強
(1)基本概念
(2)空間域
(3)變換域
2. 直方圖均衡化
(1)基本概念
影像直方圖
直方圖均衡化
(2)直方圖均衡化實作
獲取原圖資訊
繪制直方圖
直方圖均衡化
3. 區域直方圖均衡化
(1)基本概念
(2)代碼實作
4. 影像去霧
(1)基本概念
(2)實作
結束語
參考論文
(1)《直方圖均衡化在影像處理中的應用_任艷斐》
?(2)《基于直方圖均衡的影像增強_李耀輝》
1. 影像增強
此處參考論文:《直方圖均衡化在影像處理中的應用_任斐艷》
(1)基本概念
影像增強是影像處理的最基本手段, 它往住是各種影像分析與處理時的預處理程序,影像增強就是增強影像中用戶感興趣的資訊, 其主要目的有兩個: 一是改善影像的視覺效果, 提高影像成分的清晰度; 二是使影像變得更有利于計算機處理,影像增強方法一般分為空間域和變換域兩大類
(2)空間域
空間域方法直接對影像像素的灰度進行處理,在空間域內對影像進行點運算, 它是一種既簡單又重要的影像處理技術, 它能讓用戶改變影像上像素點的灰度值, 這樣通過點運算處理將產生一幅新影像
(3)變換域
變換域方法是指在影像的某個變換域中對變換系數進行處理, 然后通過逆變換獲得增強影像,對于這個變換域的理解,可以了解一下信號的傅里葉變換,將信號轉化到頻域內進行觀察分析
2. 直方圖均衡化
(1)基本概念
影像直方圖
此處可以參考我之前的文章:Python 計算機視覺(七)—— OpevCV進行直方圖統計
簡單來說,直方圖描述了影像像素點中某一個灰度值出現的概率,一幅影像的直方圖是確定不變的,但不同的兩幅影像的直方圖可能相同
直方圖均衡化
此處參考:《基于直方圖均衡的影像增強_李耀輝》
影像直方圖反映了不同灰度值的像素的面積 (連續影像)或像素個數 (離散影像)在一幀中的比例,反映了影像的某些資訊,直方圖均衡就是把一幅已知灰度概率分布的影像經過一種變換使之變成具有均勻概率分布的影像從而使資訊嫡達到最大,(簡單來說就是將影像的灰度圖變得近似均勻分布,讓其各種灰度級的像素點分布較為均勻)
(2)直方圖均衡化實作
獲取原圖資訊
首先第一步永遠是經典的讀取影像資訊:
"""
Author:XiaoMa
date:2021/10/25
"""
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei' # matplotlib 繪圖庫正常使用中文黑體
#讀取影像資訊
img0 = cv2.imread('E:\From Zhihu\For the desk\cveight1.jpg')
img1 = cv2.resize(img0, dsize = None, fx = 0.5, fy = 0.5)
h, w = img1.shape[:2]
print(h, w)
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
cv2.namedWindow("W0")
cv2.imshow("W0", img1)
cv2.waitKey(delay = 0)
獲得影像資訊:
540 540

得到的原圖如上,顯得不是很清晰,就像蒙了一層霧一樣,所以我們要對其進行影像增強,讓它變得清晰一點,讓我們能更好的欣賞美女
繪制直方圖
這個在前面的文章中已經介紹過了:
#繪制直方圖
hist0 = cv2.calcHist([img2], [0], None, [256], [0, 255])
plt.plot(hist0, label = "灰度圖直方圖", linestyle = "--", color = 'g')
plt.legend() #增加圖例
plt.savefig("E:\From Zhihu\For the desk\cveight0.jpg") #保存直方圖
plt.show()
得到的直方圖如下:
可以看出來這幅圖的像素點很少有那種亮度特別高的,大多數分布在灰度級數較低和中等的灰度級別處 ,所以這副影像整體色調是較為暗沉的(這里是對灰度圖畫的直方圖,并不是原圖哈)
直方圖均衡化
直方圖均衡化使用的函式是:cv2.equalizeHist()
OpenCV官網給出的解釋:OpenCV has a function to do this(this 代表直方圖均衡化), cv2.equalizeHist() . Its input is just grayscale image and output is our histogram equalized image.
該函式輸入一幅灰度影像,輸出即為經過直方圖均衡化后的影像
我們使用該函式進行直方圖的均衡化:
img3 = cv2.equalizeHist(img2) #直方圖均衡化
cv2.namedWindow("W1")
cv2.imshow("W1", img3)
cv2.waitKey(delay = 0)
不管效果如何,我們先把結果放出來:

可以看出來圖片的效果并沒有增強,好像變得更差了
再把它的直方圖畫出來,和原灰度圖的直方圖進行對比
代碼都在上一篇文章中解釋過了,有不懂的地方可以去上一篇查或者評論區大家討論也行
#繪制均衡化后的直方圖
#繪制直方圖
hist0 = cv2.calcHist([img2], [0], None, [256], [0, 255])
hist1 = cv2.calcHist([img3], [0], None, [256], [0, 255])
plt.subplot(2,1,1)
plt.plot(hist0, label = "灰度圖直方圖", linestyle = "--", color = 'g')
plt.legend()
plt.subplot(2,1,2)
plt.plot(hist1, label = "均衡化后的直方圖", linestyle = "--", color = 'r')
plt.legend()
plt.savefig("E:\From Zhihu\For the desk\cveight0.jpg")
plt.show()

可以看出來均衡的效果還是有的,只是對于這副影像來說直方圖均衡化的影像增強效果不太明顯
多換幾幅圖試一下(W0是原灰度圖,W1是直方圖均衡化后的灰度圖):


將上面的四幅圖進行對比可得,第三幅圖和第四幅圖的直方圖均衡化后的增強效果優于前兩幅圖,這是為什么呢?
通過對比我們可以看出,前兩幅圖的模糊形式和后兩幅圖并不相同,前兩幅圖中有些區域亮度較高,有些區域亮度較暗,經過直方圖均衡化后會出現一些高亮的部分,導致效果較差, 而很明顯使用全域的直方圖均衡化進行影像增強更適合使用在后面的那兩種情況中
此處我們果斷拋棄美女,拿一張帶有大霧的美景照片試一下:
總體來說效果還是挺好的,下面看直方圖對比:

直方圖均衡化效果也還好(以上的所有更換圖片進行嘗試只是在讀取圖片時改變路徑,并沒有改變其他的代碼)
3. 區域直方圖均衡化
(1)基本概念
前文中提到,對于那種有些部分出現高亮,而有些部分較暗的灰度圖,如果我們僅僅使用全域的直方圖均衡化,會使得某些資訊丟失,顯示的不清晰
于是就有了區域直方圖均衡化,影像被分成稱為“tiles”的小塊(在 OpenCV 中,tileSize 默認為 8x8),然后像往常一樣對這些塊中的每一個進行直方圖均衡,所以在一個小影像部分中,直方圖會限制在一個小區域內
此處參考:OpenCV 官網
(2)代碼實作
#對影像進行區域直方圖均衡化
clahe = cv2.createCLAHE (clipLimit = 2.0, tileGridSize=(10, 10)) #對影像進行分割,10*10
img4 = clahe.apply(img2) #進行直方圖均衡化
cv2.namedWindow("W2")
cv2.imshow("W2", img4)
cv2.waitKey(delay = 0)
上圖中 W0 為原圖,W1 為全域直方圖均衡化,W2 為區域直方圖均衡化
可以看出對于這幅亮度分布很不均勻的影像,使用區域直方圖均衡化進行影像增強的效果優于全域直方圖均衡化
繪制出均衡化后的直方圖:
#繪制區域均衡化后的直方圖
hist2 = cv2.calcHist([img4], [0], None, [256], [0, 255])
plt.plot(hist2, label = "區域直方圖均衡化", color = 'b', linestyle = '--')
plt.legend()
plt.savefig("E:\From Zhihu\For the desk\cveight_1.jpg")
plt.show()

與前面的全域直方圖均衡化對比:

最明顯的變化就是某一些像素點數比較少的亮度級別消失了,而且影像直方圖的變化也沒有那么突兀了,影像也就更加清晰了
4. 影像去霧
(1)基本概念
此處摘自:知乎文章
在霧霾影響下,視頻監控,遠程感應,自動駕駛等許多實際應用很容易受到威脅,檢測和識別等高級計算機視覺任務很難完成,因此,影像去霧成為一種越來越重要的技術,有很重要的研究價值,同時也是一項充滿挑戰性的課題,
影像去霧的研究演算法有很多,但是主要分為兩類:基于影像增強的去霧演算法和基于影像復原的去霧演算法,
基于影像增強的去霧演算法:基于影像增強的去霧演算法出發點是盡量去除影像噪聲,提高影像對比度,從而恢復出無霧清晰影像,代表性方法有:直方圖均衡化(HLE)、自適應直方圖均衡化(AHE)、限制對比度自適應直方圖均衡化(CLAHE)、Retinex演算法、小波變換、同態濾波等
基于影像復原的去霧演算法:這一系列方法基本是基于大氣退化模型,進行回應的去霧處理,代表性演算法有來自何凱明博士的暗通道去霧演算法、基于導向濾波的暗通道去霧演算法、Fattal的單幅影像去霧演算法(Single image dehazing)、Tan的單一影像去霧演算法(Visibility in bad weather from a single image)、Tarel的快速影像恢復演算法(Fast visibility restoration from a single color or gray level image)、貝葉斯去霧演算法(Single image defogging by multiscale depth fusion),基于大氣退化模型的去霧效果普遍好于基于影像增強的去霧演算法,后面挑選的傳統去霧演算法例子也大多是基于影像復原的去霧演算法
(2)實作
本文主要介紹的基于影像增強的影像去霧,在此使用直方圖均衡化和區域直方圖均衡化進行影像的去霧處理
"""
Author:XiaoMa
date:2021/10/25
"""
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei' # matplotlib 繪圖庫正常使用中文黑體
#讀取影像資訊
img0 = cv2.imread('E:\From Zhihu\For the desk\cveight6.jpg')
img1 = cv2.resize(img0, dsize = None, fx = 0.6, fy = 0.6)
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
h, w = img1.shape[:2]
print(h, w)
cv2.namedWindow("W0")
cv2.imshow("W0", img2)
cv2.waitKey(delay = 0)
#直方圖均衡化
img3 = cv2.equalizeHist(img2)
cv2.namedWindow("W1")
cv2.imshow("W1", img3)
cv2.waitKey(delay = 0)
#對影像進行區域直方圖均衡化
clahe = cv2.createCLAHE (clipLimit = 2.0, tileGridSize=(10, 10))
img4 = clahe.apply(img2)
cv2.namedWindow("W2")
cv2.imshow("W2", img4)
cv2.waitKey(delay = 0)
hist2 = cv2.calcHist([img4], [0], None, [256], [0, 255])
plt.plot(hist2, label = "區域直方圖均衡化", color = 'b', linestyle = '--')
plt.legend()
plt.savefig("E:\From Zhihu\For the desk\cveight_1.jpg")
plt.show()
得到影像如下:(W0 為原圖,W1 為全域直方圖均衡化,W2 為區域直方圖均衡化)
可以看出直方圖均衡化的影像去霧效果還是可以的
結束語
本篇文章主要介紹了一些影像增強中常用的手段,包括直方圖均衡化、區域直方圖均衡化、影像的去霧處理等,使用到的參考資料我都粘貼在了原文中,如果想深入學習了解可以點進去進行查看,加油!
參考論文
看了一下上傳的參考論文,好像只有會員才能下載,我把主要部分截屏粘貼在這里吧,大家一起學習,一起進步
(1)《直方圖均衡化在影像處理中的應用_任艷斐》

(2)《基于直方圖均衡的影像增強_李耀輝》

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/339028.html
標籤:AI
