在Matlab中确定一幅图像是否为灰度图像

6
我正在编写一个函数,它可以接收一张图片并执行特定的平滑任务。在函数的最开始,我使用pic = rgb2gray(pic);将图像转换为灰度图像。
我希望函数可以接收任何类型的图片(即使它已经是灰度图像)。在Matlab中,如果我传递一个灰度图像,它会出错,因为它无法进行转换(这很明显)。
是否有内置函数或简单的方法来检测图像并确定其颜色格式?
我在Google上看到了关于isRGB和isGrayscale函数的内容,但它们已经被从较新版本的Matlab中删除了...
我认为如果有内置函数的话,这样做会很酷。
     if (pic == RGB)
         do
          .
          .
          .
     elseif (pic == GrayScale)
         do
          .
          .
          .
     else 
         do
          .
          .
          .

如果不行的话,也许我可以写一个函数,它接受一个像素坐标 x,y 并测试它的值? if (p(x,y) == .... 或者其他什么?不确定... 您有什么想法吗?
3个回答

12

彩色图像有3个通道(R,G,B),因此:

size(pic, 3) = 3

对于灰度:

size(pic, 3) = 1

这很有道理。出于好奇,size(pic, 3)=2 会用于什么?我还需要包括其他哪些颜色格式吗? - Reanimation
理论上,您可以拥有任意数量的通道图像,当然包括2个或甚至多于3个的高光谱成像。实际上,彩色图像是3或4通道的(颜色空间)。根据您的代码功能,最好循环遍历数组的第三维(深度),以便能够处理任何类型的图像。 - Milo

6
与@Milo所建议的相似,但使用不同的函数。使用ndims
ndims(pic)

返回图像pic的维数。数组的维数始终大于或等于2,在RGB图像中它将是>2。尾随单例维度将被忽略(任何维度满足size(A,dim) = 1都是单例维度)。


1

f=imfinfo('yourimage.someextension');

f.ColorType

这将返回图像的ColorType,您可以通过编程进行检查。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接