Principio de filtrado de imágenes guiado (filtrado de imágenes guiado) e implementación de OpenCV

El filtro de imagen de guía es una especie de filtro de peso adaptativo, que puede mantener el límite mientras suaviza la imagen. Para obtener la derivación de la fórmula específica, consulte el documento original "Filtrado de imagen guiado" y el código fuente de matlab: http: // kaiminghe. com / eccv10 / index.html . Aquí solo se habla del principio de ponderación adaptativa, la implementación en C ++ de la imagen en escala de grises y el filtrado de mapas de la guía de imágenes en color y los resultados de la verificación.



  •  Como filtro lineal, el filtro de gráfico de guía del principio de peso adaptativo se puede definir simplemente de la siguiente forma:

    Donde I es una imagen guiada, P es la imagen de entrada a filtrar, Q es la imagen de salida filtrada y W es el valor de peso determinado de acuerdo con la imagen guiada I. El valor de peso W se puede expresar mediante la siguiente fórmula (el documento original tiene una derivación detallada):

            μk es el valor medio de los píxeles en la ventana, Ii e Ij se refieren a los valores de dos píxeles adyacentes, σk representa la varianza de los píxeles en la ventana, y ε es un valor de Penalización. El peso adaptativo se puede obtener de acuerdo con el análisis anterior: cuando Ii e Ij están a ambos lados del límite, (Ii-μk) y (Ij-μk) tienen signos diferentes, de lo contrario, tienen el mismo signo. El valor de peso del signo opuesto será mucho menor que el valor de peso del mismo signo, por lo que los píxeles en el área plana se ponderarán más y el efecto de suavizado será más obvio, mientras que los píxeles en ambos lados del límite Cuanto menor sea el peso, más débil será el efecto de suavizado, que puede mantener el efecto de contorno.
          El valor de penalización ε también tiene una gran influencia en el efecto de filtrado. Cuando el valor de ε es muy pequeño, el filtrado es como se describió anteriormente; cuando el valor de ε es grande, la fórmula de cálculo de peso se aproximará a un filtro promedio y el efecto de suavizado será más obvio.
         

    De manera similar, también podemos observar el principio de peso adaptativo del filtro de gráfico guía de acuerdo con la fórmula del filtro lineal. La fórmula del modelo de filtro lineal local es la siguiente:

          I se refiere a la imagen de guía, Q es la imagen de salida y los dos coeficientes de ak y bk se determinan conjuntamente en función de la imagen de guía I y la imagen de entrada P. Calculando el gradiente en ambos lados de la ecuación anterior, podemos obtener ▽ q = a * ▽ I, es decir, la información de gradiente de la imagen de salida está completamente determinada por la información de gradiente de la imagen de guía. Cuando hay un límite en la imagen de guía, la posición correspondiente en la imagen de salida también tendrá un límite. Los valores de ayb determinarán el peso de la información de gradiente y la información de suavizado.
          Al observar las fórmulas de ayb, el numerador de a es la covarianza de I y P, y el denominador es la varianza de I más el valor de corte ε; el valor de b es la media de P menos la media de a veces I. Se puede ver que cuando el valor de a es muy pequeño, b es aproximadamente igual al valor medio pk de los píxeles en la ventana, que es similar al filtrado medio; cuando el valor de a es grande, la salida depende principalmente de el tamaño de un * ▽ I, y la información del gradiente se puede retener.
     

  • C ++ realiza el filtrado de la imagen de la guía de la imagen en gris y la imagen en color
    De acuerdo con el pseudocódigo proporcionado en el documento original, no es difícil usar C ++ para implementar el algoritmo de filtrado de la imagen de la guía. El pseudocódigo es el siguiente:



    Aquí hay dos casos, 1. La imagen de guía es una imagen en escala de grises de un solo canal, 2. La imagen de guía es una imagen en color de tres canales.
  1. La imagen de guía es un solo canal
    para calcular la imagen promedio de I y P, y la imagen promedio de I² e I * P; luego calcule la imagen de varianza de I y la imagen de covarianza de I * P; use la fórmula para calcular los valores de ayb; Calcule el valor promedio de ayb en la ventana; luego calcule la imagen de salida de acuerdo con la fórmula.
    Hay dos situaciones aquí:
    ①La imagen de entrada es un solo canal: simplemente siga los pasos anteriores para calcular.
    ②La imagen de entrada es de tres canales: primero separe los tres canales, realice la operación de filtrado anterior en cada canal y luego combine los canales.
  2. La imagen guía es de tres canales.
    En este punto, el modelo anterior se modifica ligeramente de la siguiente manera: La

    diferencia es que al calcular a, la varianza original σ se reemplaza por la matriz de covarianza 3x3 ∑k, que se expresa de la siguiente manera:

    U es una matriz identidad de 3x3, averígualo El a ya no será un valor, sino un vector de 1 * 3, y luego encuentra b. a es un vector de 1 * 3, μk es un vector de 3 * 1, b es una constante después de la multiplicación, y el valor de la constante b se puede obtener a partir de esto.

    Hay dos situaciones aquí:
    ①La imagen de entrada es un solo canal: simplemente siga los pasos anteriores para calcular.
    ②La imagen de entrada es de tres canales: primero separe los tres canales, realice la operación de filtrado anterior en cada canal y luego combine los canales.

    Nota: El mapa guía es un mapa en color que el mapa guía es un mapa en escala de grises y la protección de los límites es más obvia.Consulte el texto original.

  • Verificación de efectividad

      La parte promediada del código se puede implementar mediante la función boxFilter () en OpenCV, o la función blur (). En resumen, es un filtro promedio, y la razón por la que no tiene nada que ver con el tamaño de la ventana es que el filtro promedio realizado mediante el uso de histograma puede reducir en gran medida el tiempo de cálculo. El código implementado por VS2015 + OpenCV3.4.0 se coloca en mi código de nube de código: https://gitee.com/rxdj/guidedFilter.git .
      Los principales parámetros de entrada son la imagen guía I, la imagen de entrada P, el radio de la ventana r, el valor de corte ε y el parámetro de salida es la imagen filtrada Q. La imagen de guía I y la imagen de entrada P pueden ser iguales o diferentes. Por ejemplo, en la coincidencia estéreo, la imagen de referencia original se usa a menudo como imagen de guía, y la imagen de espacio de costos se filtra por la imagen de guía para realizar la agregación de costos . De esta manera, el costo de coincidencia del área límite de la imagen original se puede conservar tanto como sea posible, y se puede suavizar el costo de coincidencia del área plana lisa.
       (Nota: El código en la literatura está escrito por matlab. Al leer la imagen en matlab, la imagen se normalizará automáticamente a 0-1, por lo que el valor de corte ε también es mucho menor, como 0.1, 0.01, etc. este artículo Después de leer la imagen, la operación de normalización no se realiza, por lo que la configuración del valor de corte ε será diferente. Si necesita normalizar, puede leer la imagen usted mismo y dividir por 255).

  1. Imagen original en escala de grises de un solo canal


    Cambiar el valor de corte ε
      r = 10, ε = 0 r = 10, ε = 100            
        

    r = 10, ε = 2000 r = 10, ε = 8000  Cambiar el radio de la ventana r  r = 0, ε = 500 r = 5, ε = 500 
       
     
     

                                     
      

               r = 10, ε = 500 r = 20, ε = 500 
               
 

  1. Imagen en color de tres canales Imagen
    original


    Cambiar el valor de corte ε
      r = 10, ε = 0 r = 10, ε = 100                           
         
      
    r = 10, ε = 2000 r = 10, ε = 8000 
        


    Cambiar el radio de la ventana r
    r = 0, ε = 500 r = 5, ε = 500                            
            

    r = 10, ε = 500 r = 20, ε = 500 
        

  • Algoritmo de filtro guiado
          rápido El algoritmo de filtro guiado rápido se puede encontrar en el documento "filtro guiado rápido", que también está disponible en la página de inicio anterior. El lugar más rápido es utilizar principalmente la idea de la pirámide de imágenes. Proceder de la siguiente:

  1. Realice un muestreo descendente 1 / s en la imagen guía I y la imagen de entrada P para obtener I ', P';
  2. Utilice I'y P 'para calcular los coeficientes ayb, y calcule la imagen de salida Q';
  3. Muestreo ascendente de Q'by s veces para obtener la imagen de salida final Q.

       Dado que la parte de cálculo es una imagen con muestreo reducido, la cantidad de cálculo se reducirá en gran medida sin introducir una distorsión obvia, por lo que se convierte en un filtro de imagen de guía rápido. Para obtener el código, consulte la rama fastGuidedFilter del enlace de código de la nube de código anterior.

 

 

 

Realice programación en Matlab, Python y C ++, aprendizaje automático, implementación y orientación de la teoría de la visión por computadora, tanto de pregrado como de maestría, comercio de pescado salado, respuestas profesionales, por favor, comuníquese con el número de QQ 757160542, si usted es el indicado

 

Supongo que te gusta

Origin blog.csdn.net/weixin_36670529/article/details/113903672
Recomendado
Clasificación