Изображение Matlab RGB в серую шкалу вручную

#image #matlab

#изображение #matlab

Вопрос:

У меня есть изображение RGB, и я хочу применить к нему следующие формулы, чтобы получить другое изображение. Как я могу это сделать? Я знаю, как читать / записывать изображение, и я знаю, как выполнять цикл и применять формулы, но я не знаю функций для извлечения количества строк и столбцов изображения в переменной и значений пикселей изображения в 3 плоскостях в 3-мерной плоскости.

 I = imread('myimage.jpg');

RGBImagePixles = [?, ?, ?] %of I

ROWS = ? %of I
COLUMNS = ? %of I

for r = 0 : ROWS
   for c = 0 : COLUMNS
      N[r, c] = RGBImagePixles[r,c,1]   RGBImagePixles[r,c,2]   RGBImagePixles[r,c,3]
   end
end

figure, imshow(N);
  

Комментарии:

1. Помните, что массивы Matlab (и изображения) имеют размеры от 1 до N. Кроме того, тип, связанный с изображением (класс (I)), может затруднить добавление RGBImagePixels.

Ответ №1:

На выходе imread получается 3-мерный массив, фактически 3 матрицы, расположенные вдоль 3-го измерения, поэтому, если ваше изображение имеет высоту m пикселей и ширину n пикселей, вы получите массив m x n x 3. итак:

 RGBImagePixles = I;
ROWS = size (I,1);
COLUMNS = size(I,2);
  

и вы можете заменить цикл на:

 N = sum(I, 3);
  

Однако я не уверен, что простое суммирование — это то, что вам нужно для получения изображения в оттенках серого.

Ответ №2:

[СТРОКИ СТОЛБЦЫ ЗАТЕМНЯЮТСЯ] = размер (I);

Ответ №3:

Я предполагаю, что преобразование RGB в оттенки серого — это всего лишь пример, и ваша реальная цель — научиться манипулировать пикселями изображения. В противном случае вам следует просто использовать:

 ImageRGB = imread('yourfile.jpg')
ImageGray = rgb2gray(ImageRGB)
  

Чтобы сделать это вручную:

 ImageRGB = imread('yourfile.jpg')
ImageGray = sum(ImageRGB,3) / (3*255)
  

Вы должны разделить на 3 * 255, потому что matlab ожидает, что значения изображения в оттенках серого будут между 0 и 1, в то время как значения RGB будут между 0 и 255 в каждом канале.