Как создать прямоугольную маску под известными углами?
Я создал синтетическое изображение, которое состоит из круга в центре поля с кодом ниже.
%# 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 и размерами строк / столбцов: 1 по imageSizeX) по всему изображению сверху вниз и под известными углами с краями круга (см. Прилагаемый рисунок). Кроме того, как я могу сделать прямоугольник толще, чем 1 по imageSizeX?. В качестве другого варианта я хотел бы попытаться остановить прямоугольник, скажем, в столбце 350. И наконец, есть какие-нибудь идеи, как я могу улучшить разрешение? Я имею в виду, возможно ли сохранить размер изображения одинаковым при увеличении / уменьшении разрешения.
Я понятия не имею, как это сделать. Пожалуйста, мне нужна помощь / совет / предложения, которые я могу получить. Большое спасибо!.
1 ответ
Вы можете использовать cos
функция, чтобы найти 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
Функция используется, чтобы справиться со случаем, когда толщина полосы будет выходить за верхнюю часть изображения.
Что касается разрешения, разрешение изображения определяется размером матрицы, которую вы создаете. В вашем примере это (400,300). Если вы хотите более высокое разрешение, просто увеличьте эти цифры. Однако, если вы хотите связать разрешение с более высоким DPI (точек на дюйм), чтобы на каждом физическом дюйме было больше пикселей, вы можете использовать окно "Настройка экспорта" на рисунке File
меню.