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

    相关文章推荐

    OpenCV学习笔记9 (Hough线变换)

    1.hough变换调试程序 #include "stdafx.h" #include "cv.h" #include "highgui.h" #include "cxcore.h" int ...

    图像中直线的检测——Hough变换原理

    Hough变换原理 一、简单介绍 Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的...

    更为完整的Hough变换线检测

    RGB = imread('fenkuai.bmp');%jaynes-thesis I=rgb2gray(RGB); % 图片用的是灰度图像, [x,y]=size(I); BW=edge(I); ...
    • alaclp
    • alaclp
    • 2012年05月09日 20:12
    • 747

    hough变换采直线

    • 2017年11月04日 17:25
    • 807KB
    • 下载

    OpenCV 学习(Hough 变换提取直线)

    OpenCV 学习(Hough 变换提取直线)在机器视觉应用中,我们经常要提取图像中的各种特征,最基本的特征就是图像中的线条、拐角等。这篇笔记就来讲讲如何提取图像中的直线。这里使用的方法叫做 Houg...

    Hough变换的圆检测

    • 2015年11月24日 10:15
    • 35KB
    • 下载

    Hough变换原理

    • 2014年04月27日 17:31
    • 428KB
    • 下载
    内容举报
    返回顶部
    收藏助手
    不良信息举报
    您举报文章:Hough线变换
    举报原因:
    原因补充:

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