直方图均衡再次—憋命进一步优化
0赞
发表于 10/28/2014 10:58:13 PM
阅读(5332)
直方图均衡再次—憋命进一步优化
在上一篇博文中,Bingo总结了整形运算的直方图均衡公式,如下所示:
实际上第一步、第二步可以一步完成,即小于K就累加,用Matlab实现如下:
%------------------------------------------------
%【2】计算每个灰阶出现的累积个数,并绘制直方图
Gray_Accu = zeros(1,256);
for i = 1 : h
for j = 1 : w
for k = 0 : 255
if(k >= IMG1(i,j))
Gray_Accu(k+1) = Gray_Accu(k+1) + 1;
else
Gray_Accu(k+1) = Gray_Accu(k+1);
end
end
end
end
subplot(2,2,2);
bar(0:255,Gray_Accu,'b'); %绘制直方图
xlim([0 255]); %将横坐标限定在0~255,xlim('auto');
title('处理钱的累积直方图');
xlabel('灰阶');
ylabel('累积次数 ');
执行显示原始的Night图,以及灰阶累积的直方图,如下所示:
此时可以直接进行直方图均衡,因为我们已经得到了灰阶累积数据Gray_Accu。首先简化前面我得到的公式,在上一篇博客中,我们使用如下语句实现:
IMG2(i,j) = floor(Gray_Accu(IMG1(i,j)+1)*255/(h*w));
首先进行简单的改变一下,其实相差不到,如下:由于在FPGA中我们已经了图像的分辨率,比如640*480的图像,因此这里可以直接将公示改变如下:
IMG2(i,j) = floor(Gray_Accu(IMG1(i,j)+1)/(640*480/255 =floor(Gray_Accu(IMG1(i,j)+1) /1205所以这里我们可以改变为移位,不够由于在FPGA中我们已经了图像的分辨率,比如640*480的图像,因此这里可以直接将公示改变如下:
%------------------------------------------------
%【3】基于灰阶累积的直方图均衡化:[h,w] = [480,640]
IMG2 = zeros(h,w);
for i = 1 : h
for j = 1 : w
% IMG2(i,j) = floor(Gray_Accu(IMG1(i,j)+1)*255/(h*w)); %拉伸到【0,255】
IMG2(i,j) = floor(Gray_Accu(IMG1(i,j)+1)/(1205); %拉伸到【0,255】
end
end
subplot(2,2,3);
imshow(uint8(IMG2)); %显示最终的图像
title('均衡后图像 ');
此时得到的图像,以及在此给出该图像的灰阶累积直方图,如下所示:
所以,我们在总结一下直方图均衡的公示,如下:



