步骤:
统计原图像素每个像素的个数
统计原图像<每个灰度级的像素的累积个数
家里灰度级得映射规则
将原图每个像素点的灰度映射到新图
代码:
clear all I=imread('1.jpg'); %读入JPG彩色图像文件 imshow(I) %显示出来 title('输入的彩色JPG图像') I_gray = rgb2gray(I); %灰度化后的数据存入数组 imwrite(I_gray,'1_gray.bmp'); %保存灰度图像 figure,imshow(I_gray); title('灰度图') [height,width]=size(I_gray); %测量图像尺寸参数 p=zeros(1,256); %预创建存放灰度出现概率的向量 for i=1:height for j=1:width p(I_gray(i,j) + 1) = p(I_gray(i,j) + 1) + 1; end end s=zeros(1,256); s(1)=p(1); for i=2:256 s(i)=p(i) + s(i-1); %统计图像中<每个灰度级像素的累积个数,s(i):0,1,```,i-1 end for i=1:256 s(i) = s(i)*256/(width*height); %求灰度映射函数 if s(i) > 256 s(i) = 256; end end %图像均衡化 I_equal = I; for i=1:height for j=1:width I_equal(i,j) = s( I(i,j) + 1); end end figure,imshow(I_equal) %显示均衡化后的图像 title('均衡化后图像') imwrite(I_equal,'1_equal.bmp');
实现结果如下:
原图 灰度图 均衡化后
亲们,是这样么?!是这样么?!!肿么会是这样的呢~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~是不是错了?彩色图像的均值化到底肿么弄涅~~
对于灰度图的均衡化,
参考:http://blog.csdn.net/xiajun07061225/article/details/6910129
%直方图均衡化 clear; I = imread('mm_gaussian_gray.bmp'); [height,width] = size(I); figure subplot(221) imshow(I)%显示原始图像 subplot(222) imhist(I)%显示原始图像直方图 %进行像素灰度统计; s = zeros(1,256);%统计各灰度数目,共256个灰度级 for i = 1:height for j = 1: width s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一 end end %计算灰度分布密度 p = zeros(1,256); for i = 1:256 p(i) = s(i) / (height * width * 1.0); end %计算累计直方图分布 c = zeros(1,256); c(1) = p(1); for i = 2:256 c(i) = c(i - 1) + p(i); end %累计分布取整,将其数值归一化为1~256 c = uint8(255 .* c + 0.5); %对图像进行均衡化 for i = 1:height for j = 1: width I(i,j) = c(I(i,j)+1); end end subplot(223) imshow(I)%显示均衡化后的图像 subplot(224) imhist(I)%显显示均衡化后的图像的直方图
参考 http://blog.csdn.net/xiajun07061225/article/details/6910129