MATLAB实现彩色图像灰度化

彩色图像灰度化

实现彩色图像的灰度化主要有三种方法:最大值法、平均值法、加权平均法。python

最大值法 取RGB三色份量中的最大值,即R=G=B=max(R,G,B)
平均值法 取RGB三色份量中的平均值,即R=G=B=(R+G+B)/3
加权平均法 按权取RGB三色份量的平均值,即R=G=B=WrR+WgG+WbB,当Wr=0.587,Wg=0.299,Wb=0.114时,效果更佳。

实现效果

  • 原图【彩色图像】
    原图像web

  • 最大值灰度图像
    最大值灰度图像svg

  • 平均值灰度图像(左)加权平均值灰度图像(右)
    在这里插入图片描述ui

参考代码

最大值法参考代码spa

im=imread('autumn.tif');
[x,y,z]=size(im);
immax=ones(x,y);
%最大值灰度图像
for i=1:x
    for j=1:y
    immax(i,j)=max(im(i,j,:));
    end
end
im(:,:,1)=immax;
im(:,:,2)=immax;
im(:,:,3)=immax;
figure('name','最大值灰度图像');
imshow(im);

平均值法、加权平均法参考代码
注意在进行图像处理前,要对读入的图像数据使用double()或im2double()进行类型转换!!
不然,uint8类型的图像数据运算结果超出255就会发生溢出!!code

im=imread('autumn.tif');
figure('name','原图像');
imshow(im);
%提取R、G、B三色份量
imR=im2double(im(:,:,1));
imG=im2double(im(:,:,2));
imB=im2double(im(:,:,3));
%平均值灰度图像
%取完平均值以后还要乘以255,将灰度值范围变回[0,255]并取整
imRGB=round((imR+imG+imB)/3*255);
im(:,:,1)=imRGB;
im(:,:,2)=imRGB;
im(:,:,3)=imRGB;
figure('name','灰度图像');
subplot(1,2,1);
imshow(im);
title('平均值灰度图像');
%加权平均值灰度图像
%Wr=0.587,Wg=0.299,Wb=0.114,加权平均后还要乘以255,将灰度值范围变回[0,255]并取整
imRGB2=round((0.587*imR+0.299*imG+0.114*imB)*255);
im(:,:,1)=imRGB2;
im(:,:,2)=imRGB2;
im(:,:,3)=imRGB2;
subplot(1,2,2);
imshow(im);
title('加权平均值灰度图像');