【问题标题】:how to make hough line transform to execute faster?如何使霍夫线变换执行得更快?
【发布时间】:2014-03-20 19:37:49
【问题描述】:

我已经编写了车道检测代码,使用霍夫线变换,在我存储在我的电脑中的视频文件中识别了线条 [分辨率为 1280*720],我的视频运行缓慢,我怎样才能让运行更快? ,在我的代码中,我检查了函数 hough_transform 的执行时间,该函数由 canny、cvtcolor 和 hough 变换组成,我在上面检索帧,我可以每秒执行两帧,请帮助我减少执行时间。提前谢谢 这是代码:

#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int hough_tranform(Mat src){

if(src.empty())
{

    cout << "can not open " << endl;
    return -1;
}

Mat dst, cdst;
Canny(src, dst, 50, 200, 3);

cvtColor(dst, cdst, COLOR_GRAY2BGR);

vector<Vec4i> lines;
   HoughLinesP(dst, lines, 1, CV_PI/180, 50, 50, 10 );

for( size_t i = 0; i < lines.size(); i++ )
{
    Vec4i l = lines[i];
    line( cdst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0,0,255), 3, 0);
}

 imshow("detected lines", cdst);

}


int main() {

Mat frame;
string path = "C:/santhu/Wildlife.wmv";
VideoCapture capture(path); 
namedWindow("my_window");

for(;;) {
capture >> frame;

hough_tranform(frame);

imshow("my_window", frame);

  if(cv::waitKey(30) >= 0) break;
 }
}

【问题讨论】:

  • 你试过用完全优化编译吗?
  • 试试这些:对图像设置阈值以删除非必要点、遮罩、缩小尺寸。
  • 您可以将步数减少 $R$ ant $\theta$ 以提高速度(当然,您会降低精度)。由于同步需求,霍夫变换的并行不会给您带来显着的努力。

标签: c++ visual-c++ opencv image-processing mat


【解决方案1】:

您应该在执行边缘检测之前缩小图像尺寸,然后进行霍夫线变换。然后你可以将结果放大回原来的大小。

【讨论】:

  • 我是opencv的新手,你能详细说明一下缩小图像的大小
【解决方案2】:

使用 HoughLinesP 函数的参数将帮助您以精度为代价提高性能。当图像尺寸增加时,此功能的性能将大大降低。

如果可能,请使用 HoughLines 而不是概率方法,因为它更快。

使用双线性插值缩小图像不会影响输出质量,因为 hough 变换是在 canny 边缘检测器输出上执行的。

我将遵循的步骤是:

  • 读取帧。
  • 转换为灰度。
  • 缩小灰度图像。
  • 如果可能,选择灰度图像上的 ROI 检测到。
  • 对 ROI 图像进行精打细算。
  • 进行霍夫变换。

当你在做车道检测算法时,我将投入我的 2 美分。Canny 检测对包含树木阴影等的道路没有太大帮助,因为它周围会检测到边缘.虽然概率霍夫方法减少了上述情况下的误差,但(a)限制 theta 值,(b)使用 dx 比 dy 优先级更高的 sobel 边缘检测是一些值得尝试的实验。

【讨论】:

  • 感谢@Anoop,实际上我是图像处理和 opencv 的新手,请告诉我有关缩小图像的信息。在我的代码中应用这个 hough_transform 函数之前,我实际上是在平均分割方法中应用推理差异,这值得吗?请回答这两个问题。在此先感谢
  • 我认为规范化不会有助于精明的输出。如果您依赖图像的强度值,它可能会很有用。如需调整大小,请参阅docs.opencv.org/modules/imgproc/doc/…
  • 由于这里的问题是关于霍夫的,如果您有不同的问题,最好开始一个新线程而不是拉长这个线程。
  • @AnoopK.Prabhu 我认为你不正确。概率霍夫线更快:jayrambhia.com/blog/probabilistic-hough-transform
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
相关资源
最近更新 更多