0

我创建了一个合成图像,该图像由一个框中心的圆圈组成,代码如下。

%# 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 by imageSizeX),并与圆的边缘成已知角度(见附图)。另外,如何通过 imageSizeX 使矩形比 1 厚?作为另一种选择,我很想尝试让矩形停止在第 350 列。最后,有什么想法可以提高分辨率吗?我的意思是可以在增加/减少分辨率的同时保持图像大小相同。

在此处输入图像描述

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

4

1 回答 1

0

您可以使用该cos功能找到x正确角度的坐标phi。首先请注意,与 phi 的顶点相交的半径之间的角度与下式具有角度x-axis

θ=pi-phi

该顶点的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函数用于处理条形厚度超出图像顶部的情况。

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

此处显示: 导出设置对话框的屏幕截图

于 2017-03-08T06:43:39.530 回答