Как создать прямоугольную маску под известными углами?

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

%# 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 дано:

тета = пи-PHI

и 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 меню.

Показанный здесь: Снимок экрана: диалоговое окно

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