2013-04-16 6 views
1

enter image description hereИнтенсивность изображения RGB в MATLAB

У меня есть изображение кораблей RGB. Чтобы различать два типа сосудов (артерия и вена), мне нужно рассчитать интенсивность изображения RGB в круговом ROI. Вена (V) темно-красного цвета, а артерия светло-красного цвета. Вместо того, чтобы вычислять интенсивность в разных каналах (R, G и B), можно ли рассчитать интенсивность в изображении RGB?

Я сделал расчет интенсивности только один канала (скажем, зеленый канал) в следующем порядке:

image=imread('vesselAV.jpg'); 
t = 0:pi/20:2*pi; 

xi = R0*cos(t)+x; % where x , y are coordinate of centre of circular roi 
         % (marked in image) 
yi = R0*sin(t)+y; 

g=image(:,:,2); 

roimask = poly2mask(double(xi),double(yi), size(g,1),size(g,2)); 

pr_gc = find(roimask); 

Intensity_green_roi_V =(g(pr_gc)); % intensity in roi for vein 

так же я вычислил интенсивность в рои для артерии ....

Но как я могу вычислить значение интенсивности в изображении RGB ... ?????

Благодаря

+1

Преобразуйте в HSV, а затем посмотрите только на V-канал? – Dan

ответ

3

По сути, вы хотите, чтобы преобразовать пиксели в оттенках серого значений, чтобы получить один интенсивности. Существует несколько разных способов, и this blog lists three of them, поэтому я предлагаю вам прочитать это. Однако, если вы просто хотите что-то быстро, я был бы склонен просто преобразовать все изображение в оттенках серого и использовать это значение:

grayIm = rgb2gray(image); 

rgb2gray функция использует светимость изображения (V в HSV), который третий пример в блоге.

1

Возможно, у меня возник вопрос о недоразумении. Так простите меня, если этот ответ отключен. В пикселе i, j изображение (i, j, :) представляет собой трехэлементный вектор с значениями интенсивности для трех каналов R, G и B. Если вы не хотите работать с 3-элементным вектором, тогда I рекомендовал бы использовать интенсивность R, так как там наблюдается наибольшее отклонение. т. е. работать с изображением (:,:, 1).

Если вы ищете трехмерную «типичную» интенсивность, то обычно вы вычисляете среднее значение по интересующим пикселям.

Say, mask Ваш регион интерес представлен в виде 2D-матрицы 1 и 0, то это будет вычислить среднюю 3D интенсивность в вашей области интересов:

sum(sum(double(image).*repmat(mask,[1 1 3]),2),1)/sum(reshape(mask,[],1))) 

Теперь вы можете использовать это значит интенсивность и некоторые эвклидовы метрики расстояния, чтобы определить, содержатся ли нужные пиксели в ваших определениях «вены».

Есть много других способов атаковать эту проблему сегментации, это, похоже, тот, о котором вы спрашиваете.

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