close all clear all clc srcImage = imread('lena.jpg'); srcImage = rgb2gray(srcImage); grayImage = srcImage; [height,width] = size(grayImage); % 进行像素灰度统计 NumPixel = zeros(1,256); for i = 1:height for j = 1:width NumPixel(grayImage(i,j)+1) = NumPixel(grayImage(i,j)+1)+1; end end % 计算灰度分布密度 ProbPixel = zeros(1,256); for i = 1:256 % 像素总数:512*512 ProbPixel(i) = NumPixel(i) / (height * width * 1.0); end % 计算累计直方图 CumuPixel = zeros(1,256); for i = 1:256 if i == 1 CumuPixel(i) = ProbPixel(i); else CumuPixel(i) = CumuPixel(i-1)+ProbPixel(i); end end % 累计分布取整 CumuPixel2 = uint8(255 .* CumuPixel + 0.5); % 对灰度值进行映射(均衡化) for i = 1:height for j = 1:width grayImage(i,j) = CumuPixel2(grayImage(i,j)+1); end end figure(); subplot(2,2,1),imshow(srcImage); subplot(2,2,2),imshow(grayImage); subplot(2,2,3),imhist(srcImage); subplot(2,2,4),imhist(grayImage);
效果图: