gpt4 book ai didi

matlab - 在 Matlab 中查找 pcolor 中的轮廓/边缘

转载 作者:行者123 更新时间:2023-12-05 04:10:01 24 4
gpt4 key购买 nike

我正在尝试在 Matlab 的 pcolor 图中绘制一个轮廓,该轮廓遵循“像素”的边缘。这可能最好用图片来解释。这是我的数据图。黄色数据(data==1)和蓝色数据(data==0)之间有明显的界限:

Pcolor plot

请注意,这是一个 pcolor 图,因此每个“正方形”本质上都是一个像素。我想返回跟随黄色数据像素的轮廓,只是黄色数据的边缘。

i want this output

因此输出轮廓(绿线)穿过像素面(红点)的中点。

请注意,我不希望轮廓跟随数据的中心点(黑点),这会像这条绿线那样。这可以通过 contour 轻松实现。

I don't want this outcome

此外,如果有任何帮助,我有一些可能有用的网格。我在像素中间有点(很明显,这就是我在这里绘制的),我在角上也有点,在西/东面和北/南面也有点。如果您熟悉 Arakawa grids ,这是一个 Arakawa-C 网格,所以我有 rho-、u-、v- 和 psi- 点。

我试过插值、交织网格和其他一些东西,但我没有任何运气。任何帮助将不胜感激,并会阻止我发疯。

干杯,戴夫

编辑:

抱歉,我简化了图像以使我试图解释的内容更加明显,但这是我试图分离的区域的更大(缩小)图像: zoomed out image

如您所见,它是一个复杂的轮廓,先向“西南”方向移动,然后环绕并向“东北”方向移动。这是我想通过黑点画的红线:

intended output line

最佳答案

您可以通过对 a solution I posted 进行一些修改来解决此问题到 related question .我在 data 的问题中使用了示例图像掩码的一部分。首先,您需要填充 mask 上的孔,您可以使用 imfill 来完成。来自Image Processing Toolbox :

x = 1:15;  % X coordinates for pixels
y = 1:17; % Y coordinates for pixels
mask = imfill(data, 'holes');

接下来,应用我的另一个答案中的方法来计算一组有序的轮廓坐标(位于像素角上):

% Create raw triangulation data:
[cx, cy] = meshgrid(x, y);
xTri = bsxfun(@plus, [0; 1; 1; 0], cx(mask).');
yTri = bsxfun(@plus, [0; 0; 1; 1], cy(mask).');
V = [xTri(:) yTri(:)];
F = reshape(bsxfun(@plus, [1; 2; 3; 1; 3; 4], 0:4:(4*nnz(mask)-4)), 3, []).';

% Trim triangulation data:
[V, ~, Vindex] = unique(V, 'rows');
V = V-0.5;
F = Vindex(F);

% Create triangulation and find free edge coordinates:
TR = triangulation(F, V);
freeEdges = freeBoundary(TR).';
xOutline = V(freeEdges(1, [1:end 1]), 1); % Ordered edge x coordinates
yOutline = V(freeEdges(1, [1:end 1]), 2); % Ordered edge y coordinates

最后,您可以像这样在像素边缘的中心获得所需的坐标:

ex = xOutline(1:(end-1))+diff(xOutline)./2;
ey = yOutline(1:(end-1))+diff(yOutline)./2;

这是显示结果的图表:

imagesc(x, y, data);
axis equal
set(gca, 'XLim', [0.5 0.5+size(mask, 2)], 'YLim', [0.5 0.5+size(mask, 1)]);
hold on;
plot(ex([1:end 1]), ey([1:end 1]), 'r', 'LineWidth', 2);
plot(ex, ey, 'k.', 'LineWidth', 2);

enter image description here

关于matlab - 在 Matlab 中查找 pcolor 中的轮廓/边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45073798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com