小白一個,剛開始學習數字影像處理,目前課程剛講到直方圖規定話,做作業程序中遇到問題,要求是匹配到高斯分布直方圖,結果如下。

我是直接參照課本文字敘述編的代碼,請各位大神幫幫小白
function I = matchgaussian(I,max1)
subplot(221);
imshow(I);
subplot(222);
histogram(I);
[row,col] = size(I);
pixels = row*col;
m = [pixels,1];
z = normrnd(128,35,m);
z = round(z);
[row1,col1] = size(z);
hist_gaussian = zeros(max1,1);
for i = 1:row1
if(1 <= z(i,1) && z(i,1) <= 256)
hist_gaussian(z(i,1),1) = hist_gaussian(z(i,1),1) + 1;
end
end
lut1 = I+1;
hist_org = makeHistogram(row,col,lut1,max1);
map_org = mapping(hist_org,pixels,max1);
map_gaussian = mapping(hist_gaussian,pixels,max1);
posibi_org = hist_org/pixels;
[map_new posibi_new] = gml(posibi_org,map_org,map_gaussian,max1);
for i = 1:row
for j = 1:col
if(map_new(I(i,j) + 1) < 20)
I(i,j) = (I(i,j) + 10)*4;
else
I(i,j) = map_new(I(i,j) + 1);
end
end
end
h = [1,2,1;2,4,2;1,2,1]/16;
I = filter2(h,I);
I = uint8(fix(I));
subplot(223);
imshow(I);
subplot(224);
histogram(I);
組映射
function [map_new posibi_new] = gml(posibi_org,map_org,map_spec,max1)
a = zeros(max1,1);
l = 0;
posibi_new = zeros(max1,1);
map_new = zeros(max1,1);
for i = 1:max1
if(abs(map_spec(i) - 1e-3) > 0)
a = a + map_spec(i);
[min1 posi_new] = min(abs(a - map_org));
a = zeros(max1,1);
if(l == 0)
map_new(posi_new) = i -1;
posibi_new(i) = posibi_org(posi_new);
posi_old = posi_new;
l = l+1;
else
if(abs(posi_new - posi_old) >= 1)
for j = posi_old + 1 : posi_new
map_new(j) = i-1;
posibi_new(i) = posibi_new(i) + posibi_org(j);
end
posi_old = posi_new;
else
;
end
end
end
end
如能解決,感激不盡。
uj5u.com熱心網友回復:
忘記說問題了1.組映射之后有大量0灰度級像素
2.直方圖有一塊像是被啃了,很不好看
uj5u.com熱心網友回復:
百度搜相關關鍵字。影像處理基礎 http://www.codeproject.com/Articles/781213/Fundamentals-of-Image-Processing-behind-the-scenes
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/73846.html
標籤:圖形處理/算法
上一篇:在MFC上添加Teechart控制元件,出現Debug Assertion failed?
下一篇:請問哪個是對話框顯示完成的訊息?
