代码之家  ›  专栏  ›  技术社区  ›  Hojo.Timberwolf

Matlab绘制像素线(矢量到光栅图像)

  •  0
  • Hojo.Timberwolf  · 技术社区  · 8 年前

    真的很基本,我有一系列的点,同时会创建一条线。我想把这条线变成平面上的一系列像素

    x = [10 33 50];
    y = [50 30 9];
    
    imshow(BW); hold on;
    plot(x,y)
    

    enter image description here

    我最初的想法是使用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);
    

    问题是,如果线路颠倒过来,它几乎会消失。现在我想画一条像素线,然后稀释它。问题是如何划定界限。

    2 回复  |  直到 8 年前
        1
  •  1
  •   Blue Bird    8 年前

    很抱歉给您带来不便。我个人很钦佩MATLAB的创始人,他用教具开发了一个工具箱,并与他的学生分享它来创建一家公司。MATLAB的基本思想是建立数学模型。所以,我认为数学模型是关键。

    我们继续这个故事,我们将加载一个内置图形并在其上画一条线。

    I = imread('peppers.png');
    

    然后,给出了三点。

    x = [173 206 347];
    y = [0 192 384];
    

    我们考虑一条线是否可以通过这些点。如果在平面中随机选择三个点,通常情况下,它们是非共线的。这称为一般位置。然而,arc可以完成这项工作。我们用圆弧拟合这些点。

    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);
    

    它不完全通过给定的点;然而,从多项式曲线拟合的角度来看,是距离这些点最近的直线。

    enter image description here

        2
  •  0
  •   Blue Bird    8 年前

    我们考虑一条线是否可以通过这些点。

    如果在平面中随机选择三个点,通常情况下,它们是非共线的。这称为一般位置。然而,arc可以完成这项工作。我们用圆弧拟合这些点。

    Trial>> x = [10 33 50];
    Trial>> y = [50 30 9];
    Trial>> p = polyfit(x,y,1);
    

    P是你想要的线的数学模型。下一步是生成像素。假设我们希望像素的x坐标在10到15之间变化。

    x1 = linspace(10,50);
    

    利用数学模型p计算像素的y坐标。

    y1 = polyval(p,x1);
    

    现在,我们将生成的像素和给定的点绘制在一起以查看结果。

    plot(x,y,'o')
    hold on
    plot(x1,y1)
    hold off
    

    enter image description here

    它不完全通过给定的点;然而,从多项式曲线拟合的角度来看,是距离这些点最近的直线。