如何创建已知角度的矩形遮罩?
How do i create a rectangular mask at known angles?
我用下面的代码创建了一个合成图像,它由一个位于盒子中心的圆圈组成。
%# 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,并且 row/col 尺寸:1 by imageSizeX)从上到下横跨图像并与圆的边缘成已知角度(见附图)。另外,如何通过 imageSizeX 使矩形比 1 更厚?。作为另一种选择,我很想尝试让矩形停在第 350 列。最后,我有什么想法可以改进分辨率吗?我的意思是,是否可以在 increasing/decreasing 分辨率的同时保持图像大小不变。
我不知道该怎么做。请我需要任何我能得到的help/advice/suggestions。非常感谢!
您可以使用 cos
函数找到具有正确角度 phi
的 x
坐标。
首先注意与 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)。如果您想要更高的分辨率,只需增加这些数字即可。但是,如果您想 link 将分辨率提高到更高的 DPI(每英寸点数),以便在每个物理英寸中有更多像素,您可以使用图中的 "Export Setup" window File
菜单。
我用下面的代码创建了一个合成图像,它由一个位于盒子中心的圆圈组成。
%# 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,并且 row/col 尺寸:1 by imageSizeX)从上到下横跨图像并与圆的边缘成已知角度(见附图)。另外,如何通过 imageSizeX 使矩形比 1 更厚?。作为另一种选择,我很想尝试让矩形停在第 350 列。最后,我有什么想法可以改进分辨率吗?我的意思是,是否可以在 increasing/decreasing 分辨率的同时保持图像大小不变。
我不知道该怎么做。请我需要任何我能得到的help/advice/suggestions。非常感谢!
您可以使用 cos
函数找到具有正确角度 phi
的 x
坐标。
首先注意与 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)。如果您想要更高的分辨率,只需增加这些数字即可。但是,如果您想 link 将分辨率提高到更高的 DPI(每英寸点数),以便在每个物理英寸中有更多像素,您可以使用图中的 "Export Setup" window File
菜单。