Как я могу преодолеть предупреждение: "Целочисленные операнды требуются для оператора двоеточия при использовании в качестве индекса"?

Мне нужно создать изображение с тремя уровнями, как описано в следующем вопросе: Как создать прямоугольную маску под известными углами?

Код:

%# 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 приближает значение у при создании вектора y0:y (Я чувствую, что это тот момент, когда у меня есть проблема)

Тогда мой вопрос: есть ли способ, которым я мог бы обойти это так, чтобы я точно создал желаемый угол и все-таки получил полосу от y до y0? не имея Matlab приблизить значение у, когда он создает вектор y0:y?

Может быть, если я перейду в декартовы координаты xy, у меня будет шанс? Есть идеи, как сделать это преобразование? Большое спасибо за вашу помощь!

1 ответ

Пиксели - это элемент атома цифрового изображения. Цифровые изображения являются дискретными функциями. У камеры дискретные пиксели, на экране дискретные пиксели...

Хотя считывание значений субпикселя всегда возможно посредством интерполяции, вы не можете записывать пиксели так же, как выходные данные дискретны.

Просто примите, что рисование возможно только с целочисленными пиксельными координатами, но имейте в виду, что это не мешает вам делать более точные закулисные вычисления.

Итак, чтобы ответить на ваш вопрос: вы преодолеваете предупреждение, используя целочисленные индексы.

Другие вопросы по тегам