1径簿、生成并繪制直方圖
一幅數(shù)字圖像在 [0著拭,G] 范圍內(nèi)總共有 L 個(gè)灰度級(jí),其直方圖定義為:
是區(qū)間 [0牍帚,G] 內(nèi)的第 k 級(jí)灰度儡遮,
為圖像中出現(xiàn)
這種灰度級(jí)的像素?cái)?shù)。
對(duì)于 uint8 類(lèi)圖像暗赶,G 的值為 255鄙币;
對(duì)于 uint16 類(lèi)圖像,G 的值為 65535蹂随;
對(duì)于浮點(diǎn)圖像十嘿,G 的值為 1.0。
在 matlab 工具箱中岳锁,處理圖像直方圖的函數(shù)是 imhist绩衷。
h = imhist(f, b)
p = imhist(f, b)/numel(f) %歸一化直方圖。
b 是直方圖的容器數(shù)(橫坐標(biāo)),默認(rèn)為256咳燕。
- 條形圖
bar(horz, z, width)
horz 為水平增量勿决,
z 是相應(yīng)的垂直值,
width 為條形寬度招盲,默認(rèn)0.8低缩。
如下命令將產(chǎn)生把水平軸分為10級(jí)一組的條形圖
h = imhist(f, 25);
horz = linspace(0, 255, 25);
bar(horz, h)
axis([0 255 0 60000])
set(gca, 'xtick', 0:50:255)
set(gca, 'ytick', 0:20000:60000)
axis 分別設(shè)置水平軸和垂直軸上的最小和最大值。
gca 的意思是獲得當(dāng)前軸曹货。
xtick 和 ytick 按所顯示的間隔設(shè)置水平軸和垂直軸刻度咆繁。
下列函數(shù)可以在圖形的水平軸和垂直軸上添加軸標(biāo)記
xlabel('text string', 'fontsize', size)
ylabel('text string', 'fontsize', size)
text 可以在圖中添加標(biāo)記
text(xloc, yloc, 'text string', 'fontsize', size)
給圖像添加標(biāo)題
title('titlestring')
- 桿狀圖
stem(horz, z, 'LineSpec', 'fill')
LineSpec 為線條與標(biāo)記點(diǎn)的樣式。
- plot
plot(horz, z, 'LineSpec')
自動(dòng)設(shè)定坐標(biāo)軸
ylim('auto')
xlim('auto')
ylim([ymin ymax])
xlim([xmin xmax])
fplot 為處理句柄函數(shù)時(shí)的繪圖函數(shù)顶籽。
fplot(fhandle, limits, 'LineSpec', n)
例如玩般,在范圍 [-2 2] 內(nèi)用點(diǎn)線繪制一個(gè)雙曲正切函數(shù) tanh
fhandle = @tanh;
fplot(fhandle, [-2 2], ':')
2、直方圖均衡
直方圖均衡通過(guò)把輸入圖像的灰度級(jí)擴(kuò)展到較寬灰度范圍來(lái)實(shí)現(xiàn)圖像增強(qiáng)礼饱。
對(duì)于離散的灰度級(jí)坏为,直方圖均衡變換為
直方圖均衡由函數(shù) histeq 實(shí)現(xiàn)
g = histeq(f, nlev)
nlev 是輸出圖像設(shè)定的灰度級(jí)數(shù),默認(rèn)是 64慨仿,通常設(shè)為256久脯。
在直方圖均衡中使用的變換函數(shù)是歸一化直方圖的累加求和纳胧×海可以利用函數(shù) cumsum 實(shí)現(xiàn)變換功能
hnorm = imhist(f) ./ numel(f);
cdf = cumsum(hnorm); %CDF
x = linspace(0, 1 ,256);
plot(x, cdf)
3、直方圖匹配
生成具有特定直方圖的圖像的方法跑慕,稱(chēng)為 直方圖匹配 或 直方圖規(guī)定化万皿。
實(shí)現(xiàn)直方圖匹配的函數(shù) histeq 語(yǔ)法如下
g = histeq(f, hspec);
hspec 為規(guī)定的直方圖;
- 雙模態(tài)高斯函數(shù)
function p = twomodegauss(m1, sig1, m2, sig2, A1, A2, k)
c1 = A1 * (1 / ((2*pi) ^ 0.5) * sig1);
k1 = 2 * (sig1^2);
c2 = A2 * (1 / ((2*pi) ^ 0.5) * sig2);
k2 = 2 * (sig2^2);
z = linspace(0, 1, 256);
p = k + c1*exp(-((z-m1) .^2) ./ k1) + ...
c2 * exp(-((z-m2) .^2) ./ k2);
p = p ./ sum(p(:));
function p = manualhist
repeats = true
quitnow = 'x';
p = twomodegauss(0.15, 0.05, 0.75, 0.05, 1, 0.07, 0.002);
while repeats
s = input('Enter:...');
if strcmp(s, quitnow)
break
end
v = str2num(s);
if numel(v) -= 7
disp('Incorrect number of inputs.')
continue
end
p = twomodegauss(v(1), v(2), v(3), v(4), v(5), v(6), v(7));
figure, plot(p)
xlim([0 255])
end
4核行、函數(shù)adapthisteq
這個(gè)函數(shù)執(zhí)行對(duì)比度受限的自適應(yīng)直方圖均衡牢硅,用直方圖匹配方法來(lái)逐個(gè)處理圖像中較小區(qū)域。然后芝雪,使用雙線性?xún)?nèi)插方法將相鄰的小片組合起來(lái)减余,從而消除人工引入的邊界。特別是在均勻灰度區(qū)域惩系,可以限制對(duì)比度來(lái)避免放大噪聲位岔。
g = adapthisteq(f, param1, val1, param2, val2, ...)
g = adapthisteq(f, 'NumTiles', [25 25], 'ClipLimit', 0.05);
% param: NumTiles, ClipLimit, NBins, Range, Distribution, Alpha