真的很基本,我会有一系列的积分,同时会创造一条线。我想把那条线转换成一个平面上的一系列像素
x = [10 33 50];
y = [50 30 9];
imshow(BW); hold on;
plot(x,y)
我最初想过使用poly2mask绘制线条并通过从90°角度绘制线条来展开它。
scalefactor = .08;
X1 = XData(1,1) - scalefactor*abs(YData(1,2) - YData(1,1));
X2 = XData(1,1) + scalefactor*abs(YData(1,2) - YData(1,1));
X3 = XData(1,2) + scalefactor*abs(YData(1,2) - YData(1,1));
X4 = XData(1,3) + scalefactor*abs(YData(1,2) - YData(1,3));
X5 = XData(1,3) - scalefactor*abs(YData(1,2) - YData(1,3));
X6 = XData(1,2) - scalefactor*abs(YData(1,2) - YData(1,1));
Y1 = YData(1,1) - scalefactor*abs(XData(1,2) - XData(1,1));
Y2 = YData(1,1) + scalefactor*abs(XData(1,2) - XData(1,1));
Y3 = YData(1,2) + scalefactor*abs(XData(1,2) - XData(1,1));
Y4 = YData(1,3) + scalefactor*abs(XData(1,2) - XData(1,3));
Y5 = YData(1,3) - scalefactor*abs(XData(1,2) - XData(1,3));
Y6 = YData(1,2) - scalefactor*abs(XData(1,2) - XData(1,1));
Xvect = [X1 X2 X3 X4 X5 X6];
Yvect = [Y1 Y2 Y3 Y4 Y5 Y6];
Lineimg = poly2mask(Xvect,Yvect,400,500);
问题在于,如果线条颠倒过来,它几乎会消失。现在我想到只绘制一行像素然后稀释它。问题是如何绘制线条。
答案 0 :(得分:1)
我很抱歉给您带来不便。我个人很欣赏MATLAB的创始人,他从教学辅助工具开发工具箱,并与学生分享建立公司。 MATLAB的基本思想是构建数学模型。所以,我认为数学模型是关键。
我们继续讲述这个故事,我们将加载一个内置图并在其上画一条线。
I = imread('peppers.png');
然后,给出了三点。
x = [173 206 347];
y = [0 192 384];
我们考虑一条线是否可以通过这些点。如果您在平面中随机选择三个点,通常它们是非共线的。这被称为一般位置。但是,弧可以完成这项工作。我们用弧线拟合这些点。
Trial>> p = polyfit(x,y,1);
P是您想要的线的数学模型。我们即将绘制的线的X坐标是从零到521,等于该数字。
Line_x1 = [0 521];
数学模型p用于计算Y坐标。
Line_y1 = polyval(p,Line_x1);
现在我们有足够的信息来画线。
RGB = insertShape(I,'Line',[Line_x1(1) Line_y1(1) Line_x1(2) Line_y1(2)],'LineWidth',5);
imshow(RGB);
并不完全通过给定的点数;然而,从多项式曲线拟合的角度来看,它是最接近这些点的线。
答案 1 :(得分:0)
我们考虑一条线是否可以通过这些点。
如果你在一个平面中随机选择三个点,一般来说,它们是非共线的。这被称为一般位置。但是,弧可以完成这项工作。我们用弧线拟合这些点。
Trial>> x = [10 33 50];
Trial>> y = [50 30 9];
Trial>> p = polyfit(x,y,1);
P是您想要的线的数学模型。接下来是生成像素。假设我们希望像素的x坐标从十到十五变化。
x1 = linspace(10,50);
使用数学模型p,我们计算像素的y坐标。
y1 = polyval(p,x1);
现在,我们将生成的像素和给定的点一起绘制以查看结果。
plot(x,y,'o')
hold on
plot(x1,y1)
hold off
并不完全通过给定的点数;然而,从多项式曲线拟合的角度来看,它是最接近这些点的线。