图像由彩色图转化为灰度图的三种方法

来源:互联网 发布:高速铣编程用什么软件 编辑:程序博客网 时间:2024/06/14 20:34

一、原理

对于图像由彩色图转化为灰度图有三种方法

分别为 加权法 均值法 最大值法

加权法就是  GRAY==0.3*R+0.59*G+0.11*B

均值法就是 GRAY==(R+G+B)/3

最大值发就是  max(R,G,B)

二、代码

[filename,pathname]=uigetfile({'*.jpg';'*bmp';'*gif'},'选择原图片');
picture=imread([pathname,filename]);%读取RGB格式的图像?

%用加权平均法处理图片
FirstGrayPic=rgb2gray(picture);

%用最大值法处理图片
[rows,cols,colors]=size(picture);%得到原来图像的矩阵的参数?
SecGrayPic=zeros(rows,cols);%创建一个全零的矩阵,这个矩阵用来存储用下面的方法产生的灰度图像?
SecGrayPic=uint8(SecGrayPic);%将创建的全零矩阵转化为uint8格式
R=double(picture(:,:,1));
G=double(picture(:,:,2));
B=double(picture(:,:,3));
for i=1:rows
    for j=1:cols
      SecGrayPic(i,j)=max(max(R(i,j),G(i,j)),B(i,j));
    end
end

%用平均值法处理图片?
[rows,cols,colors]=size(picture);%得到原来图像的矩阵的参数?
ThirdGrayPic=zeros(rows,cols);
ThirdGrayPic=uint8(ThirdGrayPic);
for i=1:rows
    for j=1:cols
        sum2=0;
        for k=1:colors
            sum2=sum2+picture(i,j,k)/3;%用均值法进行RGB到%灰度图像的转换?
        end
        ThirdGrayPic(i,j)=sum2;%将得到的简单平均值作为对应像素点?
    end
end

%显示图像
figure(1);
subplot(2,2,1);
imshow(picture);%显示原来的图像
title('原图片')
subplot(2,2,2);%显示加权平均值图片?
imshow(FirstGrayPic);
title('加权平均值图片');
subplot(2,2,3);%显示最大值图片?
imshow(SecGrayPic);
title('最大值法图片')
subplot(2,2,4);%显示平均值图片?
imshow(ThirdGrayPic);
title('平均值图片')

三、实验结果