Hough线变换

原创 2015年07月07日 15:00:54

一. hough变换与Canny边缘检测

1.hough线检测有两个方法,

  • Image(TColor,TDepth).HoughLines : 在进行Canny边缘检测之后应用Hough变换以检测线
  • Image(TColor,TDepth).HoughLinesBianry:对二进制图像进行hough变换(例如对Canny边缘检测结果进hough变换)

    1. hough变换构造函数:
public LineSgement2D[][] HoughLinesBianry(
    double rhoResolution,    //线检测中线最小距离单位像素,一般取1
    double thetaResolution,  //线检测中的线的倾斜角度 单位弧度
    int threshold,           //线最小像素数  超过该像素接受
    double minLineWidth,     //线宽最小值  以下两个是线与线之间最小width and gap 单位 pixel
    double gapBetweenLines   //线间距
)   
  1. hough 变换方法:
Image< Bgr,Byte> img1 = new Image< Bgr,Byte>(new Bitmap(pictureBox*.Image | ofd.FileName);
LineSegment2D[] lines = img1.HoughLinesBinary(1,Math.PI/45.0,20,30,10)[0];
Image< Bgr,Byte> ImageLines = new Image< Bgr,Byte>(CannyGray.width,Canny,Height);
foreach(LineSegment2D line in lines){
    ImageLines.Draw(line,new Bgr(Color.DeepSkyBlue),5);
}
pictureBox*.Image = imageLines.ToBitmap();
}

}


  1. hough 圆检测
    • 构造函数:

public CircleF[][] HoughCircles( //CircleF radius and the location of the circle
TColor cannyThreshold, //
TColor accumulatorThreshold, //圆最小像素
double dp, //>=1 分辨率参数,大于1时分辨率大于1
double minDist, //防止重复, 圆之间最小距离
int minRadius, // 最小圆
int maxRadius //最大圆
)
  • hough圆检测实例:(hough圆检测之前若是有边缘检测效果会下降,原因回头注意查看,检测第二个参数跟像素之间的色差好像有关,回头查看)(!圆检测参数注意查看)
  • OpenFileDialog ofd1 = new OpenFileDialog();
    if (ofd1.ShowDialog() == DialogResult.OK)
    {
        pictureBox2.Image = (new Image<Bgr, Byte>(ofd1.FileName)).ToBitmap() ;
        //Image<Bgr, Byte> img1 = new Image<Bgr, Byte>(new Bitmap(pictureBox1.Image));
        Image<Bgr, Byte> img1 = new Image<Bgr, Byte>(ofd1.FileName);
        //convert the img1 to grayscale and the filter out the noise
        Image<Gray, Byte> img2 = img1.Convert<Gray, Byte>().PyrDown().PyrUp();
        CircleF[] HoughCircles = img2.HoughCircles(
            new Gray(180),
            new Gray(120),
            2.0,
            50.0,
            20,
            100
         )[0];
        //draw circles
        Image<Bgr, Byte> imageCircles = img1;
        foreach (CircleF circle in HoughCircles)
        {
            imageCircles.Draw(circle, new Bgr(Color.Yellow), 5);
        }
        pictureBox1.Image = imageCircles.ToBitmap();
    版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

    相关文章推荐

    Hough线变换

    一. hough变换与Canny边缘检测区别 1.hough线检测有两个方法, Image(TColor,TDepth).HoughLines : 在进行Canny边缘检测之后应用Hough变换...

    Hough变换直线检测

    背景引言 在图像处理中,如果图像由已知形状和大小的物体组成,需要找出物体的形状的问题。在解决这些问题的许多可能方法中,一种是在图像中移动一个合适形状和大小的掩模,寻找图像与掩模的相关性,因由于形状变...

    精选:深入理解 Docker 内部原理及网络配置

    网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

    Hough变换检测直线

    1.普通霍夫变换HoughLines 霍夫变换中,直线用下述方程来表示:ρ=cosθ+sinθ; //使用霍夫变换检测直线 #include #include using name...

    Hough变换检测直线

    Hough变换检测直线 一幅图像是由一个个的像素组成的,有时候希望找出这些像素点中位于直线上的点所组成的点集。一种可行的方法是Hough变换,考虑一个点(x1,y1)和一条通过这个点的直线斜截式方程...

    Hough变换直线检测

    本文主要介绍Hough变换用于直线检测的思想和原理。

    【opencv2】直线hough变换

    在opencv2中,直线Hough变换有以下两种形式: 标准霍夫线变换(HoughLines)        原理在这里的博客已经说了。此函数能给我们提供一组参数对(θ,rθ) 的集合来表示检测到...

    Hough变换-直线检测

    原理: 举一个例子,有一条直线:y=bx+k。以x与y为坐标轴,那么给定一个b与一个k,就可以确定一条直线。同理如果以b与k为轴,那么给定一个x和一个y也可以确定一个直线。即xoy坐标系下的一个点在b...

    Hough变换检测直线

    直线的霍夫变换:霍夫空间极坐标与图像空间的转换公式: p = y * sin(theta) + x * cos(theta);之后遍历图像的每个坐标点,每个坐标点以一度为增量,求取对应的p值,存入...

    Hough变换检测直线

    1、原理 对于一幅二值图像(一般由对普通图像进行边缘提取得到),对于这些边缘中的直线进行识别和检测是通过以下原理进行的。对于每个点A,通过这个点的直线可以用两个参数来描述,我们一般使用斜率k和截距b...

    Hough变换检测直线

    1、直线表示方式 对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式y = ax + b方法。然而在hough变换中,考虑的是另外一种表示方式:使用(rho,theta)来表示一条直线。其中rho...
    返回顶部
    收藏助手
    不良信息举报
    您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
    举报原因:
    原因补充:

    (最多只允许输入30个字)