直方图均衡化

来源:互联网 发布:java课程大纲 编辑:程序博客网 时间:2024/06/03 19:12

直方图均衡化的目的是利用图像直方图对图像对比度进行调整,“均衡”指将原有的直方图改为均匀分布的直方图。
算法流程
1.构建一个1*255的数组h,用于统计不同灰度值对应的像素个数;
这里写图片描述
2.计算每个灰度的像素个数在整个图像中所占的百分比
hs(i)=h(i)/image.size i=0….255
这里写图片描述
3.计算图像各灰度级的累计分布hp
hp(i)=sum[hs(k)] k=0…i
这里写图片描述
4.求出新图像的灰度值
I =255*hp(i)
这里写图片描述

Matlab代码

I = (imread('lena.bmp'));subplot(2,2,1);imshow(I);subplot(2,2,2);imhist(I);[height, width]=size(I);步骤一pixel=zeros(1,256);for i = 1:height    for j = 1:width        pixel(I(i,j)+1) = pixel(I(i,j)+1) +1;//matlab里下标从1开始,所以数组往后推一位    endend步骤二N=height*width*1.0;probpixel=zeros(1,256);for i = 1:256    probpixel(i) = pixel(i)/N;end步骤三cumprobpixel=zeros(1,256);for i =1:256    if i==1        cumprobpixel(1)=probpixel(1);    else        cumprobpixel(i)=cumprobpixel(i-1)+probpixel(i);    endend步骤四for i=1:height    for j=1:width        I(i,j)=uint8(255*cumprobpixel(I(i,j)+1)+0.5);//这里是要取整    endendsubplot(2,2,3);imshow(I);subplot(2,2,4);imhist(I);   

同理c++代码也是同样的步骤。

其实呀,写代码并不难,难的是要把算法步骤理解,这样才能写出来代码。所以并没有不会写代码的人,只会有不理解算法却以自己不擅长,写不好代码为借口的人!自勉(^o^)/~

0 0