matlab 直方图均衡化(含rgb)

时间:2021-02-16 21:22:10

步骤:

统计原图像素每个像素的个数

统计原图像<每个灰度级的像素的累积个数

家里灰度级得映射规则

将原图每个像素点的灰度映射到新图

代码:

  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. [height,width]=size(I_gray);  %测量图像尺寸参数
  10. p=zeros(1,256);                            %预创建存放灰度出现概率的向量
  11. for i=1:height
  12. for j=1:width
  13. p(I_gray(i,j) + 1) = p(I_gray(i,j) + 1)  + 1;
  14. end
  15. end
  16. s=zeros(1,256);
  17. s(1)=p(1);
  18. for i=2:256
  19. s(i)=p(i) + s(i-1); %统计图像中<每个灰度级像素的累积个数,s(i):0,1,```,i-1
  20. end
  21. for i=1:256
  22. s(i) = s(i)*256/(width*height); %求灰度映射函数
  23. if s(i) > 256
  24. s(i) = 256;
  25. end
  26. end
  27. %图像均衡化
  28. I_equal = I;
  29. for i=1:height
  30. for j=1:width
  31. I_equal(i,j) = s( I(i,j) + 1);
  32. end
  33. end
  34. figure,imshow(I_equal)                           %显示均衡化后的图像
  35. title('均衡化后图像')
  36. imwrite(I_equal,'1_equal.bmp');

实现结果如下:

原图                                                                    
  灰度图                                                                   
均衡化后

matlab 直方图均衡化(含rgb)matlab 直方图均衡化(含rgb)matlab 直方图均衡化(含rgb)

亲们,是这样么?!是这样么?!!肿么会是这样的呢~~~~~~~matlab 直方图均衡化(含rgb)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~是不是错了?彩色图像的均值化到底肿么弄涅~~

对于灰度图的均衡化,

参考:http://blog.****.net/xiajun07061225/article/details/6910129

  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. s = zeros(1,256);%统计各灰度数目,共256个灰度级
  12. for i = 1:height
  13. for j = 1: width
  14. s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
  15. end
  16. end
  17. %计算灰度分布密度
  18. p = zeros(1,256);
  19. for i = 1:256
  20. p(i) = s(i) / (height * width * 1.0);
  21. end
  22. %计算累计直方图分布
  23. c = zeros(1,256);
  24. c(1) = p(1);
  25. for i = 2:256
  26. c(i) = c(i - 1) + p(i);
  27. end
  28. %累计分布取整,将其数值归一化为1~256
  29. c = uint8(255 .* c + 0.5);
  30. %对图像进行均衡化
  31. for i = 1:height
  32. for j = 1: width
  33. I(i,j) = c(I(i,j)+1);
  34. end
  35. end
  36. subplot(223)
  37. imshow(I)%显示均衡化后的图像
  38. subplot(224)
  39. imhist(I)%显显示均衡化后的图像的直方图

matlab 直方图均衡化(含rgb)

参考  http://blog.****.net/xiajun07061225/article/details/6910129