【问题标题】:How do i create a rectangular mask at known angles?如何以已知角度创建矩形蒙版?
【发布时间】:2017-03-08 04:03:20
【问题描述】:

我使用下面的代码创建了一个合成图像,该图像由一个位于方框中心的圆圈组成。

%# Create a logical image of a circle with image size specified as follows:
imageSizeY = 400;
imageSizeX = 300;

[ygv, xgv] = meshgrid(1:imageSizeY, 1:imageSizeX);

%# Next create a logical mask for the circle with specified radius and center
centerY = imageSizeY/2;
centerX = imageSizeX/2;
radius  = 100;

Img   = double( (ygv - centerY).^2 + (xgv - centerX).^2 <= radius.^2 );


%# change image labels from double to numeric
for ii = 1:numel(Img)

    if Img(ii) == 0
        Img(ii) = 2;  %change label from 0 to 2
    end

end

%# plot image
RI = imref2d(size(Img),[0 size(Img, 2)],[0 size(Img, 1)]);
figure, imshow(Img, RI, [], 'InitialMagnification','fit');  

现在,我需要在图像上从上到下创建一个矩形遮罩(标签 == 3,行/列尺寸:1,按 imageSizeX),并与圆的边缘成已知角度(见附图)。另外,如何通过 imageSizeX 使矩形比 1 厚?作为另一种选择,我很想尝试让矩形停止在第 350 列。最后,有什么想法可以提高分辨率吗?我的意思是可以在增加/减少分辨率的同时保持图像大小相同。

我不知道该怎么做。请我需要任何我能得到的帮助/建议/建议。非常感谢!

【问题讨论】:

  • 你能澄清你的目标吗?对于一些示例角度 phi,您正在寻找的正确掩码是什么?
  • 谢谢@Teddy Ort。我不太明白你的意思,但我的目标是获得几张具有不同角度 phi 值的图像(比如 10、20、30、60、90、120、150 度)。然后,我将使用它来验证来自完全不同方法的结果。请让我知道是否清楚。

标签: matlab image-processing image-masking


【解决方案1】:

您可以使用cos 函数找到x 坐标与正确角度phi。 首先注意与 phi 的顶点相交的半径之间的角度与x-axis 的角度为:

并且该顶点的x 坐标由下式给出

所以掩码只需将该行设置为 3。

示例:

phi = 45;       % Desired angle in degrees
width = 350;    % Desired width in pixels
height = 50;    % Desired height of bar in pixels
theta = pi-phi*pi/180;    % The radius angle
x = centerX + round(radius*cos(theta)); % Find the nearest row
x0 = max(1, x-height); % Find where to start the bar
Img(x0:x,1:width)=3;

生成的图像如下所示:

请注意,max 函数用于处理条形厚度超出图像顶部的情况。

关于分辨率,image resolution 取决于您创建的矩阵的大小。在您的示例中是(400,300)。如果您想要更高的分辨率,只需增加这些数字。但是,如果您想将分辨率与更高的 DPI(每英寸点数)相关联,以便每个物理英寸中有更多像素,您可以使用图中 File 菜单中的“导出设置”窗口。

此处显示:

【讨论】:

  • 感谢@Teddy Ort,它运行良好。尽管如此,我想知道如何使矩形比它更厚。其次,很想尝试让矩形停在 350 列。请问有什么建议吗?非常感谢。
  • 我可以将其添加到答案中。您能否更新您的问题以包含此内容,以便答案仍然适用于其他人阅读?
  • 哦,很抱歉,没看到你很久以前就回复了。我已经更新了问题,并添加了更多内容。非常感谢!
  • 谢谢@Teddy Ort。这是有道理的,但是以这种方式更改分辨率只会影响图形窗口中结果图像的分辨率,而不是代码中的原始矩阵,不是吗? (如果不是,请告诉我)。再一次,让我们用一个实际的例子:如果我想以 14 像素/圆的直径的分辨率创建相同的图像,我应该怎么做?然后如果我也想将其增加到 28 像素/圆的直径?
  • 我想我现在已经解决了这个问题。我非常感谢您的帮助@Teddy Ort
猜你喜欢
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
相关资源
最近更新 更多