步骤:
统计原图像素每个像素的个数
统计原图像<每个灰度级的像素的累积个数
家里灰度级得映射规则
将原图每个像素点的灰度映射到新图
代码:
1. clear all
2. I=imread('1.jpg'); %读入JPG彩色图像文件
3. imshow(I) %显示出来
4. title('输入的彩色JPG图像')
5. I_gray = rgb2gray(I); %灰度化后的数据存入数组
6. imwrite(I_gray,'1_gray.bmp'); %保存灰度图像
7. figure,imshow(I_gray);
8. title('灰度图')
9.
10. [height,width]=size(I_gray); %测量图像尺寸参数
11. p=zeros(1,256); %预创建存放灰度出现概率的向量
12. for i=1:height
13. for j=1:width
14. p(I_gray(i,j) + 1) = p(I_gray(i,j) + 1) + 1;
15. end
16. end
17. s=zeros(1,256);
18. s(1)=p(1);
19. for i=2:256
20. s(i)=p(i) + s(i-1); %统计图像中<每个灰度级像素的累积个数,s(i):0,1,```,i-1
21. end
22.
23. for i=1:256
24. s(i) = s(i)*256/(width*height); %求灰度映射函数
25. if s(i) > 256
26. s(i) = 256;
27. end
28. end
29.
30. %图像均衡化
31. I_equal = I;
32. for i=1:height
33. for j=1:width
34. I_equal(i,j) = s( I(i,j) + 1);
35. end
36. end
37. figure,imshow(I_equal) %显示均衡化后的图像
38. title('均衡化后图像')
39. imwrite(I_equal,'1_equal.bmp');
实现结果如下:
原图 灰度图 均衡化后
亲们,是这样么?!是这样么?!!肿么会是这样的呢~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~是不是错了?彩色图像的均值化到底肿么弄涅~~
对于灰度图的均衡化,
参考:
1. %直方图均衡化
2. clear;
3. I = imread('mm_gaussian_gray.bmp');
4. [height,width] = size(I);
5. figure
6. subplot(221)
7. imshow(I)%显示原始图像
8. subplot(222)
9. imhist(I)%显示原始图像直方图
10.
11. %进行像素灰度统计;
12. s = zeros(1,256);%统计各灰度数目,共256个灰度级
13. for i = 1:height
14. for j = 1: width
15. s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
16. end
17. end
18. %计算灰度分布密度
19. p = zeros(1,256);
20. for i = 1:256
21. p(i) = s(i) / (height * width * 1.0);
22. end
23. %计算累计直方图分布
24. c = zeros(1,256);
25. c(1) = p(1);
26. for i = 2:256
27. c(i) = c(i - 1) + p(i);
28. end
29. %累计分布取整,将其数值归一化为1~256
30. c = uint8(255 .* c + 0.5);
31. %对图像进行均衡化
32. for i = 1:height
33. for j = 1: width
34. I(i,j) = c(I(i,j)+1);
35. end
36. end
37.
38. subplot(223)
39. imshow(I)%显示均衡化后的图像
40. subplot(224)
41. imhist(I)%显显示均衡化后的图像的直方图