我想在图像上手动绘制线条(准确地说,是在图像上手动标记边缘),然后输出相应的边缘贴图(二进制图像)。我将MATLAB R2018a与函数imfreehand
一起使用。但是边缘图相当离散。
这是我的Matlab脚本。
% Read the image
img = imread('test.jpg');
img_size = size(img);
height = img_size(1);
width = img_size(2);
% Draw a line on the image manually
figure(1);
im(img);
h = imfreehand(gca, 'Closed', false);
% Get positions (x, y)
pos = h.getPosition();
x = int16( pos(:, 1) );
y = int16( pos(:, 2) );
% Create a binary image containing
% labeled edges
edgeMap = zeros(height, width);
for i = 1 : length(x)
edgeMap( y(i), x(i) ) = 1;
end
% Show the edgeMap
figure(2);
im(edgeMap);
上图:我在img
上手动画了一条对角线
下图:edgeMap
,标记的点(白色)相当离散。
问题: 有什么方法可以解决这个问题,使标记的边缘连续吗?
答案 0 :(得分:1)
您的线只是给定点的线性插值。要获得“连续”版本,请使用interp1
。
line = @(x1) interp1(x,y,x1);
或者,您可以通过使用
来获取所有坐标yy = interp1(x,y,min(x):max(x));