坐看云起时|

一枚码农

园龄:7年6个月粉丝:5关注:1

opencv-python 4.14. 霍夫圆变换

基础知识铺垫

通过检索相关资料,学习到了霍夫圆检测的一点点皮毛知识,它的基本内容是认为图像上任何一个非零像素点,都有可能是一个潜在圆形上的一点。通过投票计算,生成累计坐标平面,然后在设置一个累计权重,去定位圆。

在笛卡尔坐标系中圆的方程为(x - a)^2 + (y - b)^2 = r^2,其中(a,b)是圆心,r 是半径,具体你可以画一张图表示一下。
image
并且根据图片,可以看出如下结果
x = a + rcosθ
y = b + rsinθ
也就是下面的表示形式:
a = x − rcosθ
b = y − rsinθ

接下来还有几句不太好理解,但是大概明白意思的几个结论。

在笛卡尔坐标系中经过某一点的所有圆,映射到 abr 坐标系是一条三维的曲线或者解释成,对于笛卡尔 xy 平面的一个点x0,y0,对应到 abr 组成三维空间,是一个空间曲面,对于 abr 平面的一个点,对应到笛卡尔 xy 平面它是一个圆。

经过笛卡尔坐标系中所有非零像素点的所有圆,构成了 abr 坐标系中很多条三维的曲线
在笛卡尔坐标系中同一个圆上的所有点方程是相同的,它们映射到 abr 坐标系中是同一个点,所以该点累计到一定数量之后(一般设定大于一个阈值),就可以认为是圆。

如果在 xy 平面上的三个点( x 0 , y 0 ) , ( x 1 , y 1 ) , ( x 2 , y 2 ),在 abr 三维空间是对应的三个空间曲面(此时 abr 相当于常量)。
上述内容描述成方程如下:
(x0 - a)^2 + (y0 - b)^2 = r^2
(x1 - a)^2 + (y1 - b)^2 = r^2
(x2 - a)^2 + (y2 - b)^2 = r^2

求解这三个方程,我们可以得到 abr 的值。这说明( x 0 , y 0 ) , ( x 1 , y 1 ) , ( x 2 , y 2 )这三个点在由abr 所确定的圆上(即 abr 分别表示圆的圆心坐标 (x,y) 以及圆的半径 r)。

上面描述的就是标准霍夫圆变换的原理,但三维空间的计算量非常大,标准霍夫圆变化很难被应用到实际中。所以就出现了本文涉及的函数,霍夫梯度法, 也叫 2-1 霍夫变换(21HT)。
函数原型
circles=cv.HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]])
参数说明

  • image:单通道灰度图像
  • cycles:检测到的圆的信息,如:圆形,半径
  • method:检测方法。我们直接使用cv.HOUGH_GRADIENT霍夫梯度法即可
  • dp:图像分辨率的变化。默认1的时候保持和原图一样的大小
  • param1:边缘提取的高阈值
  • param2:霍夫空间的累加阈值
  • minRadius:最小圆半径
  • maxRadius:最大圆半径。如果 <= 0,则使用最大图像尺寸。如果 < 0,则返回中心而不找到半径。

返回值中每一个向量的参数分别为:第一个元素是圆的横坐标,第二个是纵坐标,第三个是半径大小。
注意:minRadius 和 maxRadius 可以更好选则圆,如果不需要,保持默认值 0 即可。

import cv2 as cv
import numpy as np

img = cv.imread(r'C:\Users\yuyalong\Pictures\Saved Pictures\boll.jpg')
gray_img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 霍夫圆检测对噪声比较敏感,所有进行霍夫圆检测的时候要先进行中值滤波。
src = cv.medianBlur(gray_img, 7)

# 霍夫圆检测
circles = cv.HoughCircles(src, cv.HOUGH_GRADIENT, 1, 60, param1=180, param2=40, minRadius=30, maxRadius=180)
print(111, circles)
for x, y, r in circles[0]:
    cv.circle(img, (int(x), int(y)), int(r), (255, 255, 0), 2, cv.LINE_AA)

cv.imshow("src", img)
cv.waitKey()

image

本文作者:一枚码农

本文链接:https://www.cnblogs.com/yimeimanong/p/17295399.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   一枚码农  阅读(142)  评论(0编辑  收藏  举报
 
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 Sold Out Hawk
  2. 2 光辉岁月 Beyond
光辉岁月 - Beyond
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 黄家驹

作曲 : 黄家驹

编曲 : Beyond

制作人 : Beyond/Gordon O'Yang

Synth Programming : Gordon O'Yang / 叶世荣

Mixed by Philip Kwok

钟声响起归家的讯号

钟声响起归家的讯号

在他生命里

仿佛带点唏嘘

黑色肌肤给他的意义

是一生奉献 肤色斗争中

年月把拥有变做失去

疲倦的双眼带着期望

今天只有残留的躯壳

迎接光辉岁月

风雨中抱紧自由

一生经过彷徨的挣扎

自信可改变未来

问谁又能做到

可否不分肤色的界限

可否不分肤色的界限

愿这土地里

不分你我高低

缤纷色彩闪出的美丽

是因它没有

分开每种色彩

年月把拥有变做失去

疲倦的双眼带着期望

今天只有残留的躯壳

迎接光辉岁月

风雨中抱紧自由

一生经过彷徨的挣扎

自信可改变未来

问谁又能做到

今天只有残留的躯壳

今天只有残留的躯壳

迎接光辉岁月

风雨中抱紧自由

一生经过彷徨的挣扎

自信可改变未来

问谁又能做到

Woo

Ah

Ah

今天只有残留的躯壳

今天只有残留的躯壳

迎接光辉岁月

风雨中抱紧自由

一生经过彷徨的挣扎

自信可改变未来

问谁又能做到

Woo

Ah

Ah

今天只有残留的躯壳

今天只有残留的躯壳

迎接光辉岁月

风雨中抱紧自由

一生经过彷徨的挣扎

自信可改变未来