- 直方圖變換
- 灰度變換
- 點運算
- 幾何變換
直方圖變換
1.灰度直方圖
灰度直方圖:數字圖像中每一灰度級像素出現的頻次(該灰度級的像素數目)(也可以標準化到概率的表示)
灰度直方圖性質
- 無空間信息。(一種值的統計,丟棄位置信息)
- 直方圖與圖像一對多的關系
- 可疊加性(全圖=子圖疊加)
直方圖反映圖像的清晰程度,直方圖均勻分布時,圖像最清晰。
判定一幅圖像是否清晰,查看是否合理的利用了全部允許的灰度級。
一幅圖像應該盡可能利用全部的灰度級
2.直方圖均衡化
直方圖修正:通過灰度映射函數$G_{new} = T(G_{old})$,將原灰度直方圖改造成所希望的直方圖。
直方圖均衡化是一種最常用的直方圖修正,把直方圖分布改造成均勻直方圖分布,均衡化后,圖像直方圖是平直的,即各灰度級出現頻數相同,圖像看起來更清晰了。
直方圖均衡化灰度映射函數
-
連續灰度級情況:概率密度函數為P(r),0<= r <= 1,代表灰度級。
變換函數s=T(r),使直方圖變平直。
要求:
- [0,1]范圍內,T(r)是單增函數,且T的值域為[0,1]
- 反變換函數為單減函數,值域也為[0,1]。
圖片.png
-
數字圖像的直方圖均衡化:設總像素n個,分L個灰度級,第k個灰度級出現的概率P(Rk)=Nk/N,Nk表示第k個灰度級出現的頻數。
變換函數:連續變換函數離散化,概率求和。公式如下,圖3圖片.png
Matlab處理
- i2 = histeq(i1),對i1直方圖均衡化
- imhist(i2) ,繪制i2的直方圖
- i2 = adapthisteq(i1),改進的直方圖均衡化效果,針對空間信息做了改進。
3.直方圖規定化(直方圖匹配)
修改一幅圖像的直方圖,使得它與另一幅圖像的直方圖匹配或具有一種預先規定的函數情況。
目標:突出感興趣的灰度范圍,改善圖像質量。
場景:上一小節,我們將灰度分布不均的圖像通過均衡化轉換為灰度理論均勻(分布概率密度曲線平直)的圖像,增強了圖像效果,但是實際場景,我們可能要突出某一些部分,又或是我們發現灰度在靠近0和1的部分太暗或太亮會導致細節模糊甚至丟失,自然的我們想到類似于均衡變換,將不均的概率分布曲線轉換成我們特定的預設的一種灰度分布上(如高斯分布),以實現我們需要的增強效果。
方法:1)直接通過f到g的映射,f為原函數,g為變換后的函數,但過程可能很復雜。2)通過均衡變換為中介,將原圖灰度分布f1和預設的直方圖分布f2都做一個變換到均衡分布,分布使用映射函數s和t,那么對原圖做s變換,再做t的反變換就得到了f2的分布。過程簡單。
步驟如圖6所示:
預設分布:規定化的效果較好,但是前提是需要知道圖像的變換的較好的預設分布,這里需要根據具體情況分析,比如根據圖中的場景,能分析該圖主要應該呈現兩種色調,那么對預設的分布,我們可以給出一種“雙峰”的灰度分布,那么處理后的圖像就會趨于呈現兩種色調。
特例:二值圖,雙峰分布圖中間添加閾值。
灰度變換
場景:曝光不足或過度等原因,產生對比度不足,使圖像細節分辨不清。
方法:使用灰度變換方法解決這些問題。
對比度:簡單講就是最白與最黑的亮度單位的相除值,體現的是灰度級的max和min的極差。
灰度級變換:空間域點運算,通過某個變換函數有:g(x,y)=T(f(x,y)),T即為變換函數。也可以寫作R = T(r)
1.線性灰度變換
變換函數T為線性函數。
-
加常數:會縮小動態范圍,降低對比度,調節整體亮度,可能會損失某一部分灰度等級。如下圖所示,圖7圖片.png
(特例)圖像反轉:g(x,y)=255-f(x,y),簡單理解為"黑白顛倒".
乘常數:g(x,y)=Cf(x,y).改變動態范圍。
-
分段線性變換:變換函數采用分段的線性函數,突出感興趣的部分。
(特例)削波,cliping。
(特例)閾值化,thresholding。二值圖。
(特例)灰度窗口變換,將某一區間的灰度級和其他部分(背景)分開。
非線性灰度變換
- 對數變化,低灰度區擴展,高灰度區壓縮
- 之所變化,高灰度區擴展,低灰度區抑制。
- 冪函數。
- LUT變換,Look Up Table,查找表。一種映射表。
Matlab處理
- bc = imcomplement(b),圖像反轉
- th = imadjust(t,[],[],0.5),用于進行圖像的灰度變換
圖像運算
1.算術運算:加減乘除
- 加法:C(x,y)=A(x,y)+B(x,y)。去除“疊加性”噪音;生成圖像疊加效果。
- 減法:與加法類似。
- 乘法:C(x,y)=A(x,y)*B(x,y)。局部顯示;二值蒙版圖像與原圖像做乘法。
- 除法:不常用
2.邏輯運算:與或非
3.比較運算:如,取平均,最大,最小
圖像幾何變換
幾何失真分為系統失真和非系統失真,系統失真是有規律的、能預測的,非系統失真則是隨機的。
- 鏡頭畸變
- 遙感圖像矯正:飛行器和地球相對運動造成呈現掃描不規整。
- 圖像配準:工業生產、醫院中裝置定位。
幾何變換是圖像中物體的空間變換,可以看成是圖像內各物體在圖像內移動的過程,如轉動、扭曲、傾斜、拉伸。
1.基本幾何變換的定義
原圖為f(x,y),變換為,x'=T1(x,y),y'=T2(x,y),幾何變換僅對x,y坐標做變換,灰度值不變。(注意:這里的變換不簡單為單個變量的變換,如x'的變換實際上同時涉及變量x和y)
目標圖像為g(x,y)=f(T1(x,y),T2(x,y))
2.常用的幾何變換
-
平移變換。g(x,y)=f(x+tx,y+ty),原圖平移向量為(tx,ty)。(這里需要注意計算機呈像中的坐標選取,是左上角為坐標原點的,理論研究中采用常用的數學坐標)。寫做矩陣形式為,圖8圖片.png
-
鏡像:水平鏡像和垂直鏡像
-
水平鏡像:沿Y軸翻轉。g(x,y)=f(width-x,y),矩陣形式為圖9圖片.png
-
垂直鏡像:沿x軸翻轉。g(x,y)=f(x,heigh-y),矩陣形式為圖10圖片.png
-
水平鏡像:沿Y軸翻轉。g(x,y)=f(width-x,y),矩陣形式為圖9
-
轉置:x,y坐標對換。與旋轉是不同的,事實上,轉置后的圖與旋轉90度后的圖是水平鏡像關系。矩陣表示如圖11圖片.png
-
旋轉變換:繞原點旋轉a度,(注:逆時針為正向角度)。旋轉后畫布變大,圖像增大。數學關系用極坐標表示較為方便。如圖12圖片.png
通常的做法,是以圖像中心做旋轉,方法:
- 圖像中心平移到原點
- 順時針以原點做旋轉
- 圖像中心平移回原坐標
以上三個變換可以寫成三種變換的矩陣相乘的形式,就可以一步到位。
問題:旋轉中會出現鋸齒、網紋、斷裂。
- 像素的方向是固定的,縱橫。旋轉的時候并不會按某一個旋轉角度分布像素,這樣旋轉后像素點就會有交錯,不規整,錯位。像素排列不完全按照原有的相鄰關系。
- 計算過程中,xy的映射涉及到三角函數,會進行浮點數取整,最終造成某些點空洞(沒有取值),漏點。
問題的本質都是應為像素值填充不是連續的。
解決辦法:插值填充。
-
縮放變換:縮小的時候要滿足采樣定理,否則會發生信息丟失;放大的時候需要對空位填入適當的新值,是信息的估計。矩陣表示如下圖13.圖片.png
-
拉伸變換:混合的幾何變換,或者說是幾何變換的一般形式。如下圖14圖片.png
3.灰度級差值
解決的問題:旋轉中出現的漏點、放大中新增的空點、拉伸中的空點,都存在未知像素值的點。
解決方法:插值法,利用鄰域的像素來估計新的像素值。
a)最鄰近插值:重復最臨近點,取最近點的像素值。簡單,但效果一般,放大倍數太大時會出現馬賽克現象。
b)雙線性插值:根據該空點上下左右4個點進行兩次插值。f(x,y)=ax+by+cxy+d。(xy兩個方向上都取線性變換值)
c)三次立方插值(立方卷積插值):差值函數為S(x)(是一個擬合的正弦差值函數,sinx/x,這是信息論中已知的優秀的差值算法,認為圖像中的任何兩個連續點的灰度值不是線性變換,而是一種sinx/x的函數,故采用擬合該函數的一個立方差值函數來代替計算),如下圖15
待求像素的灰度值由周圍16個點的灰度值加權內插得到,計算量大,效果較好。矩陣表示為圖16
實踐任務
Matlab和Python分別實現下列任務
- 加載圖像
- 預備任務:彩色圖像到灰度圖像的變換(因為之后的學習大多處理灰度圖,所有需要將彩色圖變換到灰度圖)
- 實踐1:灰度圖及其灰度直方圖,和均衡化后的圖及其直方圖,4個subplot做對比呈現
- 實踐2:灰度圖按高斯分布和雙峰分布做直方圖匹配,給出4個subplot對比呈現
- 實踐3:圖像旋轉,及插值處理。
- 實踐4:圖像高倍放大,及插值算法處理比較。