我有血管的RGB图像。为了区分两种血管类型(动脉和静脉),我需要计算圆形ROI中RGB图像的强度。静脉(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
同样地,我计算了动脉的roi强度......
但是如何计算RGB图像中的强度值...... ?????
由于
答案 0 :(得分:3)
基本上,您希望将像素转换为灰度值以获得单一强度。有许多不同的方式,this blog lists three of them所以我建议你阅读。但是,如果你只是想要快速的东西,我倾向于简单地将整个图像转换为灰度并使用该值:
grayIm = rgb2gray(image);
rgb2gray
函数使用图像的亮度(HSV中的V),这是博客文章中的第三个示例。
答案 1 :(得分:1)
我可能误解了这个问题。如果这个答案没有,请原谅我。在像素i,j处,图像(i,j,:)是三元素向量,具有三个通道R,G和B的强度值。如果您不想使用3元素向量,那么我建议使用R强度,因为那里出现最大偏差。即使用图像(:,:,1)。
如果您正在寻找三维“典型”强度,那么通常,您可以计算感兴趣像素的平均值。
说,mask
是您感兴趣的区域,表示为1和0的2D矩阵,然后这将计算您感兴趣的区域的平均3D强度:
sum(sum(double(image).*repmat(mask,[1 1 3]),2),1) / sum(reshape(mask,[],1)))
现在,您可以使用此平均强度和一些欧氏距离指标来确定您的“静脉”定义中是否包含所需的像素。
还有很多其他方法可以解决这个细分问题,但这似乎是你要问的问题。