4

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

例如,

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

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

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

在此处输入图像描述

4

3 回答 3

5

正如 eykanal 所说,您可以使用impoly函数在图像中创建任何类型的 ROI。提取坐标的一般解决方案是创建您想要的 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
于 2011-10-18T13:36:01.940 回答
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函数

于 2011-10-18T02:35:59.187 回答
0

我不知道您对 ROI 使用什么表示,但我会建议一些方法:

  1. 如果您的 ROI 是一个椭圆并且您知道它的方程,只需将其应用于结果坐标。使用标志来决定它是否在里面

  2. 如果您的 ROI 是某种多边形,您可以使用函数inpolygon

  3. 您可以将 ROI 渲染为黑白图像并轻松测试命中/未命中。

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

于 2011-10-17T21:21:39.277 回答