此博客旨在記錄自學過程,文中代碼均爲MATLAB。
1.亮度變換函數
1.1函數imadjust
g = imadjust(f,[low_in high_in],[low_out high_out],gamma)
函數作用爲:將f中low_in到high_in 之間的值映射到 g中low_out 到 high_out之間,其中,輸入圖像應爲uint8 uint16 double類。gamma爲映射後的曲線類型。gamma<1 斜率遞減曲線 gamma=1 直線 gamma>1 斜率遞增曲線
函數輸出的值均爲0到1之間。若爲uint8類,則255恢復原值;若爲uint16,則65535恢復原值。
應用
(1)亮度翻轉
g = imadjust(f,[0 1],[1,0])
(2)突出感興趣帶
g = imadjust(f,[0.5,0.75],[0,1])
將0.5到0.75區間映射到整個區間。
1.2 對數和對比度拉伸變換
g = c*log(1 + double(f))
應用
(1)壓縮動態範圍
g = im2uint8(mat2gray(log(1 + double(f)))))
傅里葉頻譜範圍爲[0 10^6]或者更高。當其顯示於已經線性縮放至8比特的監視器上時,高值部分佔優,從而導致頻譜中低亮度值的可視細節丟失。通過計算對數,10的六次方左右的動態範圍會降至14左右,便於操作。
2. 直方圖處理與函數繪圖
2.1 生成並繪製圖像的直方圖
常用:imhist
h = imhist(f,b)
imshow(h)
#或者直接 imhist(f,b)
b爲灰度級數,默認爲256.(uint8有256 uint16有65536)
其他常用:
bar(horz,v,width) #繪製條形圖
stem(horz,h1,'fill') #繪製散點圖
plot()
2.2 直方圖均衡化(增強對比度)
g = histeq(f)
imhist(g)
3.3 直方圖規定化
g = histeq(f,hgram) #hgram爲給定直方圖
imhist(g)
3.空間濾波
3.1 線性空間濾波
矩陣卷積運算:https://blog.csdn.net/qq_32846595/article/details/79053277
此處參考 @寰宇的行者
g = imfilter(f,w,'filtering_mode','boundary_options','size_options')
f是輸入圖像,w是濾波掩模(模板矩陣),filtering_mode爲濾波類型(相關:‘corr’ 卷積:‘conv’),boundary_options爲邊界選項(P,replicate,symmetric,circular 詳見MATLAB工具箱),size_options(大小選項 full:與被擴展圖像大小相同 same:與輸入圖像大小相同)
3.2 非線性空間濾波
處理方法同線性濾波(沿中心移位)
處理函數:nlfilter()與colfilt() 見matlab文件
4.常用濾波器函數
4.1 線性空間濾波器
用如下代碼來生成濾波掩模w的函數fspecial()
w = fspecial('type',parameters)
type表示濾波器類型,parameters進一步定義了指定濾波器(詳見MATLAB help)
4.2 非線性空間濾波器
最常用函數如下,該函數生成一個排序濾波器:
g = ordfilt2(f,order,domain)
最常用的排序濾波器爲中值濾波器,生成函數如下:
g = ordfilt2(f,median(1:m*n),ones(m,n))
其中,median計算1:m*n的中值。
實際應用中,提供了一個二維中值濾波器:
g = medfilt2(f,{m,n},padopt)
[m,n]定義一個鄰域,中值就在該鄰域計算;padopt指定了三個可能的邊界填充選項:
‘zeros’(默認值)
‘symmetric’(f按照鏡像翻轉的方式對稱地沿其邊界擴展。默認方式可能會產生黑色邊界效應,即邊界出現黑色斑點,用此選項可能能消除。)
‘indexed’(若f是double類,則用1填充,否則用0填充)