如何克服警告:"冒号运算符用作索引时需要整数操作数"?



我需要创建一个具有三个级别的图像,如以下问题中所述: 如何以已知角度创建矩形蒙版?

法典:

%# 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坐标,我有机会?任何想法如何进行此转换?非常感谢您的帮助!

像素是数字图像的原子元素。数字图像是离散函数。相机具有离散像素,屏幕具有离散像素...

虽然始终可以通过插值读取子像素值,但不能以与输出离散相同的方式写入像素。

只需接受只能使用整数像素坐标进行绘制,但请记住,这不会阻止您在幕后进行更精确的计算。

所以回答你的问题: 通过使用整数索引来克服警告。

相关内容

  • 没有找到相关文章

最新更新