直方图均衡再次—憋命进一步优化
0赞
发表于 2014/10/28 22:58:13
阅读(4342)
直方图均衡再次—憋命进一步优化
在上一篇博文中,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('均衡后图像 ');
此时得到的图像,以及在此给出该图像的灰阶累积直方图,如下所示:
所以,我们在总结一下直方图均衡的公示,如下: