Определите, является ли изображение оттенками серого в Matlab

Я пишу функцию, которая может принимать изображение и выполнять определенные задачи сглаживания. В самом начале моей функции я преобразую изображение в оттенки серого, используя pic = rgb2gray(pic);

Я надеюсь разрешить функции принимать любое изображение (даже если его уже оттенки серого). В Matlab, если я передаю ему изображение в оттенках серого, это в настоящее время ошибки, потому что он не может преобразовать его (что очевидно).

есть ли встроенная функция или простой способ протестировать изображение и определить формат цвета?

Я читал в google что-то о функциях isRGB и isGrayscale, но они были удалены из более поздних версий Matlab...

Я думаю что-то вроде этого было бы здорово, если бы у него была встроенная функция.

     if (pic == RGB)
         do
          .
          .
          .
     elseif (pic == GrayScale)
         do
          .
          .
          .
     else 
         do
          .
          .
          .

если нет, возможно, я мог бы написать функцию, которая принимает pixel x,y и проверяет его значение?

if (p(x,y) == .... или что-то? Я не уверена... Мысли?

3 ответов


похоже на то, что предложил @Milo, но с другой функцией. Использовать ndims :

ndims(pic)

возвращает количество измерений в образ pic. Количество измерений в массиве всегда больше или равно 2, а в RGB-изображении это будет >2. Конечные одноэлементные измерения игнорируются (одноэлементное измерение-это любое измерение, для которого size(A,dim) = 1.)


цветные изображения имеют 3 канала (R, G, B), так что:

size(pic, 3) = 3

для оттенков серого:

size(pic, 3) = 1

f=imfinfo ('yourimage.someextension');

Ф.Цветотипы

это вернет вам ColorType изображения, которое вы можете проверить программно.