Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当使用hough变换进行直线检测时,为什么θ的范围为0~179?_C++_Image Processing_Hough Transform - Fatal编程技术网

C++ 当使用hough变换进行直线检测时,为什么θ的范围为0~179?

C++ 当使用hough变换进行直线检测时,为什么θ的范围为0~179?,c++,image-processing,hough-transform,C++,Image Processing,Hough Transform,我正在尝试使用hough变换进行直线检测。 我大致了解它的工作原理,但有一件事我不太清楚 在霍夫变换中,线性方程变为r=xcos(θ)+ysin(θ) 图像中的每一行都用r和θ来区分 这就是我想知道的。当它在C++中实现时,(在书和许多因特网页面中) 他们改变了θ0~359->0~179的范围,使r有2*对角线来存储180~359θ线 有必要吗?θ范围减小2倍,r增大2倍。。。 数组[r][θ]在更改前后具有相同的空间 还有一个问题 在我的图片中,第一个象限是显示屏,而红线(第三个象限)从未显

我正在尝试使用hough变换进行直线检测。 我大致了解它的工作原理,但有一件事我不太清楚

在霍夫变换中,线性方程变为r=xcos(θ)+ysin(θ) 图像中的每一行都用r和θ来区分

这就是我想知道的。当它在C++中实现时,(在书和许多因特网页面中) 他们改变了θ0~359->0~179的范围,使r有2*对角线来存储180~359θ线

有必要吗?θ范围减小2倍,r增大2倍。。。 数组[r][θ]在更改前后具有相同的空间

还有一个问题

在我的图片中,第一个象限是显示屏,而红线(第三个象限)从未显示在显示屏上。(显示屏上可以显示第二或第四象限线。)
所以,θ范围只有-90~180或r只有3/2*对角线而不是2是有效的吗?

要达到最大涂层密度,你应该围绕图像/屏幕的中心(而不是角落)旋转线条

所以,你应该把θ从0变为360,把r从0变为(对角线/2)

或者,您可以将θ从0变为180,将r从(-diagonal/2)变为(diagonal/2),因为θ=45且r=-50的直线与θ=135且r=50的直线相同


我认为在书中,他们并不在意图像中心(这是不好的),只是绕着角落旋转直线(屏幕坐标为0,0),所以它使图像变大了2倍。当θ从0到180时,它们应该从对角线到对角线变化,这使得IntalValx 2×对角线< /P>这是一个C++问题吗?我没有看到任何C++相关的东西,实际上,它不仅仅是C++问题。你说得对……谢谢你的回答。当θ从0到360时,r是从0到对角线/2??您的意思是案例图像的中心是原点(0,0)?我想案例图像的左下方是原点。这取决于你如何实现你的坐标系。想象一下,您的图像在世界坐标系中是从(-Width/2,-Height/2)到(Width/2,Height/2),当您需要(x,y)(在世界坐标系中)像素时,只需从图像(在图像坐标系中)中获取像素(x+Width/2,y+Height/2)。