Изображение Matlab RGB в оттенках серого вручную - PullRequest
1 голос
/ 09 октября 2011

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

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);

Ответы [ 3 ]

1 голос
/ 09 октября 2011

[ROWS COLUMNS DIMS] = размер (I);

1 голос
/ 09 октября 2011

Я предполагаю, что 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 в каждом канале.

1 голос
/ 09 октября 2011

Вывод 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);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...