我需要创建一个具有三个级别的图像,如以下问题中所述: 如何以已知角度创建矩形蒙版?
法典:
%# Create a logical image of a circle with image size specified as follows:
imageSizeX = 401;
imageSizeY = 301;
[columngrids, rowgrids] = meshgrid(1:imageSizeX, 1:imageSizeY);
%# Next create a logical mask for the circle with specified radius and center
centerY = (imageSizeY/2) + 0.5;
centerX = (imageSizeX/2) + 0.5;
radius = 50;
Img = double( (rowgrids - centerY).^2 + (columngrids - centerX).^2 <= radius.^2 );
%# change image labels 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');
%# create the desired angle
phi = 45;
width = 350; % Desired width in pixels
height = 300; % Desired height of bar in pixels
y = centerY - round(radius*cos(phi*pi/180)); % Find the nearest column
y0 = max(1, y-height); % Find where to start the bar
Img(y0:y, 1:width)=3;
figure, imshow(Img, RI, [], 'InitialMagnification','fit');
我已经意识到,在大多数情况下,将表示(radius*cos(phi*pi/180))
找到y
的部分四舍五入可能会在所需角度上产生错误。因此,如果我删除‘round function’
,我会在图像中形成所需角度的确切点获得实际y value
。尽管如此,我还是收到了如上所述的警告。但是,如果我进一步应用该行:Img(y0:y, 1:width)=3;
,代码仍然有效,但我注意到 Matlab 在创建向量时近似于 y 值y0:y
(我觉得这是我有问题的地方)
那么我的问题是:有没有办法解决这个问题,这样我就可以准确地创建我想要的角度,并且最终仍然有从 y 到 y0 的条形? 没有让 matlab 在创建矢量y0:y
时近似 y 值?
也许如果我转换为笛卡尔xy坐标,我有机会?任何想法如何进行此转换?非常感谢您的帮助!
像素是数字图像的原子元素。数字图像是离散函数。相机具有离散像素,屏幕具有离散像素...
虽然始终可以通过插值读取子像素值,但不能以与输出离散相同的方式写入像素。
只需接受只能使用整数像素坐标进行绘制,但请记住,这不会阻止您在幕后进行更精确的计算。
所以回答你的问题: 通过使用整数索引来克服警告。