标签图像边缘不连续(Matlab)

时间:2018-07-31 08:28:24

标签: image matlab computer-vision

我想在图像上手动绘制线条(准确地说,是在图像上手动标记边缘),然后输出相应的边缘贴图(二进制图像)。我将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,标记的点(白色)相当离散。

问题: 有什么方法可以解决这个问题,使标记的边缘连续吗?

test.jpg. The blue line is draw manually edge map (binary image)

1 个答案:

答案 0 :(得分:1)

您的线只是给定点的线性插值。要获得“连续”版本,请使用interp1

line = @(x1) interp1(x,y,x1);

或者,您可以通过使用

来获取所有坐标
yy = interp1(x,y,min(x):max(x));