Расширенное использование команды Matlab Roipoly
Я новичок в Matlab и работаю над обработкой изображений. Я использую функцию roipoly для создания маски. Как я понимаю, я могу использовать это так:
I = imread('eight.tif');
c = [222 272 300 270 221 194];
r = [21 21 75 121 121 75];
BW = roipoly(I,c,r);
figure, imshow(I)
figure, imshow(BW)
Изображение показано ниже:
Одно из моих наблюдений заключалось в том, что интерполяция между соседними точками, как определено матрицей c & r, выполняется с помощью "Линейной интерполяции", в другом смысле между точками всегда проводится прямая линия. Может ли быть возможно, что каким-то образом будут включены другие типы интерполяции, такие как квадратичная или кубическая сплайн-интерполяция?
Предположим, что я действительно хотел сделать это, как показано на рисунке ниже. [Простите мой рисунок, это не очень хорошо].
Здесь кружки показывают точки на контуре. Я хотел, чтобы извлекаемая или создаваемая фигура имела форму, показанную линиями. Как вы можете видеть, это возможно только в том случае, если мы выполняем интерполяцию с использованием сплайнов или квадратных уравнений, а не с помощью линейной интерполяции, которая выполняется с помощью roipoly.
Как я могу это сделать? Ребята, вы можете мне помочь?
1 ответ
Вы можете использовать imellipse:
I = imread('eight.tif');
% roughly estimating ellipse values from your given c/r
c = [222 272 300 270 221 194];
r = [21 21 75 121 121 75];
xmin = min(c);
ymin = min(r);
width = range(c);
height = range(r);
h_im = imshow(I);
e = imellipse(gca,[xmin ymin width height]);
BW = createMask(e,h_im);
figure, imshow(I)
figure, imshow(BW)
Если вы не хотите использовать затмение, вы можете использовать interp1 или другие функции интерполяции для c и r:
% editing r and c so the shape closes - just take first value, append to end:
c = [222 272 300 270 221 194 222];
r = [21 21 75 121 121 75 21];
% adjust interpolation to suit
c2 = interp1(1:7,c,1:0.2:7,'pchip');
r2 = interp1(1:7,r,1:0.2:7,'pchip');
BW2 = roipoly(I,c2,r2);