直方图规定化处理问题

lengyue17 2018-03-10 10:39:16
小白一个,刚开始学习数字图像处理,目前课程刚讲到直方图规定话,做作业过程中遇到问题,要求是匹配到高斯分布直方图,结果如下。


我是直接参照课本文字叙述编的代码,请各位大神帮帮小白
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
如能解决,感激不尽。
...全文
943 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-03-12
  • 打赏
  • 举报
回复
lengyue17 2018-03-10
  • 打赏
  • 举报
回复
忘记说问题了 1.组映射之后有大量0灰度级像素 2.直方图有一块像是被啃了,很不好看

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧