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