实现彩色图像的灰度化主要有三种方法:最大值法、平均值法、加权平均法。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('加权平均值灰度图像');