#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 в каждом канале.