Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何以已知角度创建矩形遮罩?_Matlab_Image Processing_Image Masking - Fatal编程技术网

Matlab 如何以已知角度创建矩形遮罩?

Matlab 如何以已知角度创建矩形遮罩?,matlab,image-processing,image-masking,Matlab,Image Processing,Image Masking,我已经创建了一个合成图像,它由一个方框中心的圆圈组成,下面是代码 %# 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 sp

我已经创建了一个合成图像,它由一个方框中心的圆圈组成,下面是代码

%# 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');  
%#创建圆形的逻辑图像,图像大小指定如下:
imageSizeY=400;
imageSizeX=300;
[ygv,xgv]=meshgrid(1:imageSizeY,1:imageSizeX);
%#接下来,为具有指定半径和中心的圆创建逻辑遮罩
centerY=imageSizeY/2;
centerX=imageSizeX/2;
半径=100;

Img=double((ygv-centerY)。^2+(xgv-centerX)。^2您可以使用
cos
功能查找
x
坐标,该坐标具有正确的角度
phi
。 首先请注意,与φ顶点相交的半径之间的角度与
x轴之间的角度由以下公式给出:

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

关于分辨率,由您创建的矩阵的大小决定。在您的示例中,即(400300)。如果您想要更高的分辨率,只需增加这些数字。但是,如果您想将分辨率链接到更高的DPI(每英寸点数),以便在每一物理英寸中有更多像素,则可以使用“导出设置”图
文件
菜单中的窗口

如图所示:

你能澄清你的目标吗?例如,角度φ,你要找的正确的遮罩是什么?谢谢@Teddy Ort。我不太明白你的意思,但我的目标是获得几个角度φ值不同的图像(比如10、20、30、60、90、120、150度)。然后,我将使用此方法验证来自完全不同方法的结果。请让我知道它是否清晰。谢谢@Teddy Ort,它工作得非常完美。尽管如此,我想知道如何使矩形比它更厚。第二,我很乐意尝试将矩形停在第350列。有任何建议吗?非常感谢。我可以添加该选项t的答案。你能更新你的问题,包括这个,以便答案仍然适用于其他人阅读吗?哦,很抱歉,没有看到你已经回答了很久。我已经更新了问题,我添加了一点。非常感谢!谢谢@Teddy Ort。这是有道理的,但这样更改分辨率只会影响结果图像在图形窗口中的分辨率,而不是代码中的原始矩阵,不是吗?(如果不是,请告诉我).再一次,让我们用一个实际的例子:如果我想以14像素/圆直径的分辨率创建相同的图像,我该怎么办?然后如果我也想将其增加到28像素/圆直径?我想我现在已经涵盖了这一点。我非常感谢您的帮助@Teddy Ort