Compartilhamento de tecnologia

C: Uma breve visão geral da função filter2D

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

em OpenCVfilter2D A função é uma ferramenta muito poderosa para convolver imagens para aplicar vários filtros lineares. Esta função processa cada pixel da imagem e modifica as características da imagem convolvendo-a com um kernel de convolução (ou filtro) especificado.O seguinte é sobrefilter2DIntrodução detalhada da função:

protótipo de função

No OpenCV,filter2DO protótipo da função é o seguinte:

void cv::filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel,  
                  Point anchor = Point(-1,-1), double delta = 0,  
                  int borderType = BORDER_DEFAULT);

Descrição do parâmetro

  • fonte: Imagem de entrada.
  • DST: Imagem de saída e imagem de entradasrcTêm o mesmo tamanho e número de canais.
  • profundidade : A profundidade desejada da imagem de saída (tipo de dados). Quando for -1, significa que a imagem de saída tem a mesma profundidade que a imagem de entrada.
  • núcleo : Kernel de convolução (ou filtro), que é uma matriz de ponto flutuante de canal único. Esta matriz define como realizar operações de convolução na imagem de entrada.
  • âncora : O ponto de ancoragem do kernel, que indica a posição relativa do ponto de filtro no kernel. O ponto de ancoragem deve estar localizado dentro do kernel; o valor padrão (-1,-1) significa que o ponto de ancoragem está localizado no centro do kernel.
  • delta: Um valor opcional que será usado ao armazenar pixels filtrados emdstadicionado anteriormente aos pixels filtrados.
  • tipo de borda : Método de extrapolação de pixels, usado para processar pixels fora do limite da imagem. Ele determina como os pixels limites são processados ​​quando o kernel de convolução excede o limite da imagem.As opções comuns incluemBORDER_CONSTANTBORDER_REPLICATEBORDER_REFLECTespere.

princípio de trabalho

filter2D A função na verdade executa uma operação de convolução (embora tecnicamente ela calcule uma correlação em vez de uma convolução estrita, uma vez que não há inversão do kernel envolvida). A operação de convolução envolve "deslizar" o kernel de convolução sobre a imagem de entrada, multiplicar os elementos correspondentes de cada submatriz do mesmo tamanho do kernel de convolução e, em seguida, adicionar os resultados. Este processo gera um novo valor de pixel que é colocado no local correspondente na imagem de saída. À medida que o kernel de convolução desliza sobre toda a imagem de entrada, esse processo é repetido até que a imagem de saída completa seja gerada.

Cenários de aplicação

Ao alterar o kernel de convolução,filter2DAs funções podem obter uma variedade de efeitos de processamento de imagem, incluindo, entre outros:

  • Nitidez de imagem: Usar um kernel de convolução de nitidez específico pode tornar as bordas da imagem mais nítidas.
  • filtro médio: Usar o kernel de convolução médio pode reduzir o ruído da imagem, mas pode torná-la desfocada.
  • Filtro gaussiano : A filtragem gaussiana é uma técnica de suavização de imagem comumente usada que pode reduzir o ruído da imagem enquanto mantém as informações de borda.Emborafilter2DA função em si não fornece diretamente a geração de kernels gaussianos, mas pode ser passadagetGaussianKernelfunção gera um kernel gaussiano e usafilter2DExecute a filtragem gaussiana.
  • detecção de borda: Ao projetar kernels de convolução específicos (como operador Sobel, operador Laplaciano, etc.), as bordas da imagem podem ser detectadas.

Código de amostra

O seguinte é um usofilter2DCódigo de exemplo para filtragem de média de função (versão Python):

#include