Procesamiento de imágenes y visión por computadora: Capítulo 5: Segmentación de imágenes: Transformación de Hough

1. Introducción al principio de la transformada de Hough

 Hough Transform es un método de inspección de gráficos por visión por computadora de uso común. Hough Transform se usa generalmente para inspeccionar líneas rectas o círculos.

 El principio de la transformada de Hough es el siguiente:
 suponga que hay una línea recta en la imagen y la expresión es la siguiente:
y = kx + by=kx+by=k x+bSupongamos que
 especificamos arbitrariamente un punto(x 0, y 0) (x_{0},y_{0})( x0,y0) , entonces para cualquier línea recta que pase por este punto, la siguiente fórmula debe ser verdadera:
b = − kx 0 + y 0 b=-kx_{0}+y_{0}b=kx _0+y0
 En este momento cambio la imagen con xey como ejes a una imagen con byk como ejes, en este momento la línea recta también puede cambiar, y como se puede deducir arriba, la imagen correspondiente también es una línea recta. , como se muestra en la figura:
Insertar descripción de la imagen aquí
 Además, tomamos un punto de la recta (x 1, y 1) (x_{1},y_{1})( x1,y1) , entonces debe existir la siguiente fórmula:
b = − kx 1 + y 1 b=-kx_{1}+y_{1}b=kx _1+y1
 Dibujando dicha función en la imagen, podemos ver que las dos líneas rectas se cruzan en un punto (k ∗ , b ∗ ) (k^{*},b^{*})( k ,b )(x 1, y 1) (x_{1},y_{1})en el( x1,y1) ( x 0 , y 0 ) (x_{0},y_{0}) ( x0,y0) una línea recta determinada por dos puntos.
![Inserte descripción de la imagen aquí](https://img-blog.csdnimg.cn/905cb7cad8ce40eaa338bde0626db96d.png
 Pero en nuestra detección de línea recta real, no usaremos el método del sistema de coordenadas anterior. El método anterior solo proporciona una idea de solución. Usaremos ecuaciones de coordenadas polares para completar la solución del método anterior. Para la línea recta anterior, coordenadas polares La ecuación se puede expresar como:
ρ = xcos θ + sin θ \rho=xcos\theta+sin\thetar=x porque θ+s en θdonde
 ,θ \thetaθ es el ángulo entre el vector normal de la línea recta y la dirección positiva del eje x, yρ \rhoρ es la distancia vertical desde el origen del sistema de coordenadas hasta la línea recta, como se muestra en la siguiente figura: Como se muestra a continuación
Insertar descripción de la imagen aquí
 , podemos encontrar que solo hay una línea recta en coordenadas polares (ρ \rhoρ ,θ \thetaθ ) En consecuencia, cambiar el tamaño de un parámetro cambiará la línea recta transformada al dominio espacial. Y todos los puntos de esta línea recta en el espacio aéreo pueden estar en coordenadas polares (ρ \rhoρ ,θ \thetaEl número de pares de coordenadas polares a los que corresponde un punto en la línea recta representada por θ
Insertar descripción de la imagen aquí
) (como se muestra en la siguiente figura)  en el sistema de coordenadas polares depende deθ \thetaEl tamaño del paso de θ , si el tamaño del paso esβ \betaβ , entonces la expresión de coordenadas polares para n es la siguiente:
n = 360 β n=\frac{360}{\beta}norte=b360
 La imagen correspondiente es la siguiente: A
Insertar descripción de la imagen aquí
 continuación, asumimos que la curva de coordenadas polares correspondiente a tres puntos en el espacio aéreo es como se muestra en (a) de la figura siguiente. La curva de coordenadas polares pasa por un punto al mismo tiempo, lo que significa que hay una recta en el espacio aéreo que pasa por estos tres puntos, solo busca el punto que tenga más intersecciones, que es la recta que buscas en el espacio aéreo.
Insertar descripción de la imagen aquí

2. Proceso del algoritmo de transformación de Hough

·Hough变换直线检测的步骤如下:
1.0的取值范围为[0,360],单位为度根据检测精度要求,采取适当的步长对角度和长度的取值范围进行离散化,形成0-p平面上的离散网格。
2.将每一个离散网格视为一个投票累加器,初始时全部清03.遍历图像的所有像素,对于每个像素计算离散值0i和p=xcos0+ysin0.
4.对在参数空间中将对应的累加器中的值加1,从而完成求出相应的离散化值p,对于每个(p,0)该像素点的投票的投票之后,在离散化的参数空间中找出所累积的投票值
5.访问完所有的图像像素并完成所有,点这些点所对应的参数即为检测得到的直线的参数大于某给定闽值T的局部极大值点,

3. Código del algoritmo de transformación de Hough

import numpy as np
import cv2
from PIL import Image,ImageEnhance 
import matplotlib.pyplot as plt
"""
hough变换是一种常用的计算机视觉图形检验方法,霍夫变换一般用于检验直线或者圆。

"""
img = Image.open(r"C:\Users\Zeng Zhong Yan\Desktop\py.vs\python学习\test.webp")
#增强图像效果
img = ImageEnhance.Contrast(img).enhance(3)
img.show()
#处理成矩阵,便于后续处理
img = np.array(img)
#灰度处理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#cv2.THRESH_OTSU具有双峰值,显示效果更好.
"""
cv2.THRESH_OTSU使用最小二乘法处理像素点。一般情况下,cv2.THRESH_OTSU适合双峰图。
cv2.THRESH_TRIANGLE使用三角算法处理像素点。一般情况下,cv2.THRESH_TRIANGLE适合单峰图。
"""
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)
#canny边缘检验算法处理
result = cv2.Canny(thresh, ret-30, ret+30, apertureSize=3)

#霍夫变换检测直线
lines = cv2.HoughLinesP(result, 1, 1 * np.pi / 180, 10, minLineLength=10, maxLineGap=5)
# 画出检测的线段
for line in lines:
    for x1, y1, x2, y2 in line:
        cv2.line(img, (x1, y1), (x2, y2), (255, 0, 0),2)
img = Image.fromarray(img, 'RGB')
img.show()

4. Efecto del algoritmo de transformación de Hough

1. La imagen original es la siguiente:
Insertar descripción de la imagen aquí
2. El efecto de detectar líneas rectas después de la transformada de Hough
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_71819746/article/details/133381679
Recomendado
Clasificación