0
我试图确定围绕在contourf情节特定的轮廓水平边框的边框:确定周围的轮廓
- 绘制数据的contourf情节
- 情节与0.075的水平轮廓在同一个情节。
- 提取从轮廓水平
- 轮廓数据计算每个轮廓数据
- Do循环为质心X Y的每个元素的质心,并计算到其它 质心x和y距离。合并轮廓数据的距离小于阈值5, 并将其放置在区域中。
- 重新绘制数据并在同一图上创建每个区域周围区域x y数据的框。
这里是生成contourf情节并尝试建立边框代码:
axes(handles.axes1);
cla(handles.axes1);
contourf(xC(1,:),yC(:,1),zDiff, 200,'LineColor','none');
colormap(handles.axes1,'jet');
colorbar(handles.axes1);
axis equal
caxis([cMin cMax]);
hold on
[Cm,hm] = contour(xC(1,:),yC(:,1),zDiff,[0.075 0.075],'k');
axis equal
Sm = contourdata(Cm);
hwb = waitbar(0.1, 'Processing')
[p,q] = size(Sm);
for i = 1:q
pts = centroid(Sm(1,i).xdata,Sm(1,i).ydata);
format long
centCt(i,1) = pts(1);
centCt(i,2) = pts(2);
end
[centCxs,indxs] = sort(centCt(:,1));
centCys = centCt(indxs,2);
Se = Sm;
for i = 1:q
Se(1,i).flag = 0;
end
ct = 1;
for j = 1:q
datax = [];
datay = [];
ct2 = 1;
for i = 1:q
rcentd = sqrt((centCxs(i,1) - centCxs(j,1)).^2 + (centCys(i,1) - centCys(j,1)).^2);
if(rcentd < 5)
if(Se(1,i).flag == 0)
datax = [datax;Se(1,i).xdata];
datay = [datay;Se(1,i).ydata];
Se(1,i).flag = 1;
ct2 = ct2 + 1;
end
end
end
if(ct2 > 5)
area(ct).xdat = datax;
area(ct).ydat = datay;
ct = ct + 1;
end
end
close(hwb);
cla(handles.axes1);
contourf(xC(1,:),yC(:,1),zDiff, 200,'LineColor','none');
colormap(handles.axes1,'jet');
colorbar(handles.axes1);
axis equal
caxis([cMin cMax]);
hold on
hold(handles.axes1,'on');
for i = 1:length(area)
[rectx,recty] = minboundrect(area(i).xdat,area(i).ydat);
plot(rectx,recty,'-k');
end
初始轮廓图片:
结果我得到:
所需的结果:
试图理解你得到的结果,使用[MATLAB调试器(https://nl.mathworks.com/help/matlab/matlab_prog/debugging-process-和-features.html)可能会非常有帮助。如果你明白你为什么得到这个结果,你可能会自己解决问题。为我们提供示例图像,对我们也可能非常有帮助。 – m7913d