How to identify contiguous regions between two thresholds?
7 次查看(过去 30 天)
显示 更早的评论
If I have a variable z at mapped locations x and y, is there way to obtain the x-y locations of the contour(s) enclosing any continuous region in which z is between two thresholds minZ and maxZ? I do not have the Image Processing toolbox but this task may be similar to image segmentation. Below I use contourf to obtain the x,y locations of the region's outer edge, but perhaps there is a better approach.
% Make a fake dataset
z = peaks;
z = z(1:25, :); % Let's make different numbers of x and y elements for clarity
y = 1:size(z, 1);
x = 1:size(z, 2);
% Desired thresholds for the region
minZ = 2;
maxZ = 3;
[cc, hh] = contourf('v6', x, y, z, [minZ maxZ]); % Must use version 6
for iContour = 1:length(hh)
% Obtain the x and y location of the region's outer edges
% Does not account for cutouts inside the region
if get(hh(iContour), 'cdata') == minZ
xOutline = get(hh(iContour), 'xdata');
yOutline = get(hh(iContour), 'ydata');
% Find the points inside the region
isInside = inpolygon(x, y, xOutline, yOutline);
end
end
delete(hh); % Get rid of contours
0 个评论
采纳的回答
ChristianW
2013-2-6
编辑:ChristianW
2013-2-6
[C,h] = contour(...)
The ContourMatrix C contains directly the infomation you are looking for. Just look up ContourMatrix in the Matlab help.
Here is an example plot for the first line:
Z = peaks;
subplot(211)
[C,h] = contour(Z,[2 3]); title('contour'); ax_c = gca;
subplot(212)
hold on; title('proof')
plot( C(1,(1:C(2,1))+1) , C(2,(1:C(2,1))+1) )
set(gca,'xlim',get(ax_c,'xlim'),'ylim',get(ax_c,'ylim'))
更多回答(1 个)
Image Analyst
2013-2-6
Explain what "identify" means. You can of course just make a binary image of where that criteria is true like this:
zIsInRange = (z >= minZ) & (z <= maxZ);
But this binary image could have several blobs on it. That's why I ask you what "identify" means to you. Normally if you had the Image Processing Toolbox, you'd call bwlabel() or bwconncomp().
3 个评论
Image Analyst
2013-2-6
Too bad you don't have the IPT. There are several ways to do this in a line or two, like with bwboundaries(), which will give you the nested/child boundaries also. I haven't played with contour() that much - it might be able to do it.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Contour Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!