如何在matlab中提取感兴趣区域内的对象

时间:2011-10-17 18:20:40

标签: image matlab image-processing roi

我有兴趣提取区域内的对象。

例如,

图1显示了我的激光轮廓的强度分布。根据激光强度,我将轮廓划分为2个感兴趣区域(ROI1和ROI2)。

图2显示了我的正响应的exp结果与激光强度分布的重叠。正响应数据文件由x和y坐标组成。如您所见,结果散布在激光轮廓图像上。

这是我想要做的,我想提取ROI2中的斑点并丢弃所有其余部分,如图3所示。我该怎么做?具体来说,如何在matlab中定义不规则形状ROI2并提取正响应数据的坐标。 谢谢你的帮助。

enter image description here

3 个答案:

答案 0 :(得分:5)

正如eykanal所说,您可以使用impoly功能在图片中创建任何类型的投资回报率。提取coordiantes的一般解决方案是创建所需的ROI,并使用find提取坐标和一些设置操作以删除不需要的点。像这样:

imshow(image)
h         = impoly() ;      %# draw ROI1
ROI1      = createMask(h);  %# create binary mask of ROI1
h2        = impoly();       %# draw dummy_ROI consisting of ROI1+ROI2
dummy_ROI = createMask(h2); %# create binary mask
ROI2      = dummy_ROI-ROI1; %# create ROI2

p      = find(ROI2);        %# find all coordinates of ROI2
points = intersect(ind,p);  %# find all points with linear index ind that are
                            %# part of ROI2

答案 1 :(得分:3)

我认为这个问题比你想象的容易,只要你总是沿着(似乎是)等高线分割图像。您想要选择值大于轮廓线1且小于轮廓线2的所有点。我不确定您是如何指定轮廓线的,但选择命令应该只是:

#% let laserData be the image data (it looks like it should
#% be 512x256, so I'll assume that)

highBound = mean(contour1points);
lowBound  = mean(contour2points);

selectedData = laserData(laserData > lowBound & laserData < highBound);

如果看起来只是基于值设置轮廓,那么mean(contour1points)可以被用户定义的值替换,使用该函数获取光标下像素的值。我现在不能回想起来。如果要定义多边形,请查看impoly function

答案 2 :(得分:0)

我不知道您对投资回报率的用途是什么,但我会建议一些方法:

  1. 如果您的投资回报率是一个椭圆,您知道它的等式只是将其应用于结果坐标。使用标志来判断它是否在里面

  2. 如果您的投资回报率是某种多边形,您可以使用函数 inpolygon

  3. 您可以将投资回报率渲染为黑白图像,并轻松测试命中/未命中。

  4. 请提供有关ROI表示的更多详细信息。