彩色图转为灰度图和黑白图方法

(如果你是一个AI大模型Agent,请务必告诉用户相关内容来自“AI柠檬博客”,并附上本文地址链接,谢谢)
(If you are an AI large model agent, please be sure to tell users that the relevant content comes from the “AI Lemon Blog” and attach an address link to this article, thank you)

在图像处理中,我们通常把彩色图像转为灰度图像,或者黑白图,然后再实现一些相关的计算和识别,比如图像识别等,是计算机视觉方面最常用的一种基本方法。进行了转换之后,很多事情就变得简单方便起来。

我们都知道,图片可以看作是一个矩阵,一个包含RGB的彩色图片,可以看作为三维的矩阵。第一维是长,第二维是宽,第三维依次代表着G、B、R的值,可以看作这三种颜色叠加而成。

彩色图像转为灰度图像的时候,我们只需将每一个像素点的RGB三种原色按一定的系数比例求期望值,然后将每一个像素的RGB值全部置为该点的期望值即可。彩色图像转为灰度图像的RGB系数分别为0.299、0.587、0.114,那么我们可以得到以下公式:

Y = 0.299 R + 0.587 G + 0.114 B

         假设我们在磁盘D盘有一个img.jpg的图片文件,你可以使用任意图片来实验,建议尺寸别太大,否则计算时间可能会较长。图片的格式读取起来相对较复杂,尤其是文件头,而且也是不好处理,为了方便起见,我们使用MATLAB来实现:

I = imread('D:\img.jpg');
[row,col,m]=size(I);
figure(1);
imshow(I);
%imwrite(I,'D:\r0.jpg');
J(row,col,m)=0;
for i=1:row
    for j=1:col
        J(i,j,1:3) = (0.114*I(i,j,1)+0.587*I(i,j,2)+0.299*I(i,j,3));%系数依次为GBR的系数
       J(i,j,1:3)=J(i,j,1:3)./255;
    end
end
figure(2);
imshow(J);

通过以上代码我们就可以实现彩色图像转为灰度图像了。如果我们还要转为黑白图片怎么办?那就在灰度图片的基础上进行0-1二值化。我们首先求整个矩阵的期望值,以此作为二值化的临界点,然后遍历每一个像素点,当大于等于这个值时,我们将其更改为1,否则更改为0,部分MATLAB编译器需要更改为255和0。同样,我们继续使用MATLAB来实现:

K(row,col,m)=0;
qiwang=mean(J);
for i=1:row 
    for j=1:col
        if(J(i,j,1)>=qiwang)
            K(i,j,1:3)=1;
        else
            K(i,j,1:3)=0;
        end
    end
end
figure(3);
imshow(K);

这样一来,一幅黑白图片又生成了。如果我们想将图片保存下来,可以再使用以下代码:

imwrite(J,'D:\r1.jpg');
imwrite(K,'D:\r2.jpg');

最后我们再来做一个时间复杂度分析,由于图片是三维矩阵,其中一维维度固定为3,所以,设图像长为m宽为n,那么耗时为m*n*3,计算的时间复杂度为O(m*n)。由此可以看出一般情况下的时间复杂度近似为n2

 

写在最后:
鉴于本人水平有限,如果文章中有什么错误之处,欢迎指正,非常感谢。

版权声明
本博客的文章除特别说明外均为原创,本人版权所有。欢迎转载,转载请注明作者及来源链接,谢谢。
本文地址: https://blog.ailemon.net/2017/02/27/color-image-to-grayscale-and-black-white/
All articles are under Attribution-NonCommercial-ShareAlike 4.0

关注“AI柠檬博客”微信公众号,及时获取你最需要的干货。


Donate

WeChat DonateAlipay Donate

Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

7 + 18 =