【发布时间】:2017-11-10 19:18:12
【问题描述】:
我正在尝试从 MATLAB pcolor 图中提取特定轮廓(从一个名为 M 的矩阵生成,该矩阵也在此处上传),如下图所示: p>
但是我想只提取轮廓,如下所示:
黄色线是我想提取的,这里为了说明目的而突出显示。
但我得到的结果如下:
除了曲线之外,我不需要任何其他位/杂物。
我在matrix M 上应用以下代码以获得错误结果。
[~, threshold] = edge(M, 'sobel');
fudgeFactor = 0.6;
BWs = edge(M,'sobel', threshold * fudgeFactor);
se90 = strel('line',6,70);
se0 = strel('line',3,90);
BWsdil = imdilate(BWs, [se90 se0]);
BWnobord = imclearborder(BWsdil,18);
seD = strel('cube',3);
BWfinal = imerode(BWnobord,seD);
BWfinal = imerode(BWfinal,seD);
pcolor(BWfinal);colormap(jet); shading interp; colorbar;
如何只根据需要获取轮廓?我必须使用任何边缘检测过滤器还是必须在应用任何过滤器之前执行平滑处理?
更新:我应用了高斯滤波器并获得了以下图像。上部的噪音仍然存在。我只想提取曲线。 Image after applying a Gaussian filter
sigma = 30;
smoothImage = imgaussfilt(M,sigma);
smoothGradient = imgradient(smoothImage,'CentralDifference');
pcolor(smoothGradient);colormap(jet); shading interp; colorbar;
【问题讨论】:
-
那不是数据的轮廓,是吗?那条线实际上并不在数据中,而是您想从数据中计算出来的东西。你选择这条线的标准是什么?您需要想出一种伪数学方式来描述它,例如下面没有更多“红色”的地方
-
感谢您的澄清。是的,这条线最初不在数据中,我将其标记为黄色以进行说明。 (这是我需要提取的部分)。我只需要获取与曲线对应的矩阵值,即底部的第一个红色值,之后我不需要杂乱。
-
是的,但事实上,这太宽泛了。对此没有通用的解决方案,除非您尝试用更具体的术语来定义该行是如何描述的
-
我更新了应用高斯滤波器后获得的图像。我想要这样的东西(一条漂亮的曲线),上面所有的杂乱或噪音都消失了。该线是从底部定义的每个第一个像素。 (从底部看的第一个红色条目/矩阵值)
标签: image matlab image-processing edge-detection noise-reduction