2012-12-19 3 views

ответ

10

Изображения представляют собой матрицы (2D, если оттенки серого, 3D, если цветные) в MATLAB.

Вы можете использовать x(i,j) для доступа к пикселю в местоположении (i,j) в черно-белом изображении.

Если изображение окрашено, вы можете использовать x(i,j,:) для доступа к значениям r, g, b в 3-векторах соответственно. Если вам нужны отдельные каналы, то вы можете использовать x(i,j,1) для красных, например.

Вы можете прочитать this page, чтобы узнать больше.

+0

Спасибо за ваш ответ. Как я могу получить индексы изображений? Как и при использовании следующей команды: 'p1 = I (0,0);', я получил: '??? Попытка получить доступ к I (0,0); индекс должен быть положительным целым числом или logical.' – Simplicity

+0

Индексы начинаются с 1 и идут на длину измерения. Это не похоже на C. – petrichor

+0

Получил, что вы имеете в виду. Но нет ли более практичного способа получить «все» значения пикселей без индекса по индексу? Тем более, что вы знаете несколько раз, что у вас может быть изображение с большим количеством пикселей, и будет очень трудоемкий доступ к каждому пикселю в отдельности. Как вы думаете? Спасибо – Simplicity

1

Вы можете использовать reshape извлечь все значения пикселей изображения в вектор со значениями пикселей:

frame = imread('picture.jpg'); 
frame_size = size(frame); 
allpixels = reshape(frame, frame_size(1)*frame_size(2), frame_size(3)) 

Это может быть полезно, если вы хотите векторизации вашего кода Matlab (чтобы избежать for цикла, проходит через каждый пиксель). Чтобы вернуть исходное представление изображения:

frame2 = reshape(allpixels, frame_size); 
+0

Как преобразовать координаты «запроса» в пиксели? Например, я хочу знать значения в пикселях (1,1) и (20,20). Как мне написать? –

0

, чтобы получить значение в pixel(1,1) мы просто написать image(1,1).

Смежные вопросы