我有兴趣提取区域内的对象。
例如,
图 1 显示了我的激光轮廓的强度轮廓。根据激光强度,我将轮廓分为 2 个感兴趣区域(ROI1 和 ROI2)。
图 2 显示了我的正响应 exp 结果与激光强度分布的重叠。肯定响应数据文件由 x 和 y 坐标组成。如您所见,结果分散在激光轮廓图像上。
这就是我想要做的,我想提取 ROI2 中的点并丢弃所有其余的点,如图 3 所示。我该怎么做?具体来说,如何在matlab中定义不规则形状的ROI2并提取正响应数据的坐标。谢谢您的帮助。
我有兴趣提取区域内的对象。
例如,
图 1 显示了我的激光轮廓的强度轮廓。根据激光强度,我将轮廓分为 2 个感兴趣区域(ROI1 和 ROI2)。
图 2 显示了我的正响应 exp 结果与激光强度分布的重叠。肯定响应数据文件由 x 和 y 坐标组成。如您所见,结果分散在激光轮廓图像上。
这就是我想要做的,我想提取 ROI2 中的点并丢弃所有其余的点,如图 3 所示。我该怎么做?具体来说,如何在matlab中定义不规则形状的ROI2并提取正响应数据的坐标。谢谢您的帮助。
正如 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
我认为这个问题比你想象的要容易,只要你总是沿着(看起来是)轮廓线分割图像。您想选择所有值大于等高线 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
函数。
我不知道您对 ROI 使用什么表示,但我会建议一些方法:
如果您的 ROI 是一个椭圆并且您知道它的方程,只需将其应用于结果坐标。使用标志来决定它是否在里面
如果您的 ROI 是某种多边形,您可以使用函数inpolygon
您可以将 ROI 渲染为黑白图像并轻松测试命中/未命中。
请提供有关 ROI 表示的更多详细信息。