기술나눔

C: filter2D 함수에 대한 간략한 개요

2024-07-08

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

OpenCV에서filter2D 이 기능은 다양한 선형 필터를 적용하기 위해 이미지를 컨볼루션하는 데 매우 강력한 도구입니다. 이 함수는 이미지의 각 픽셀을 처리하고 지정된 컨볼루션 커널(또는 필터)로 컨벌루션하여 이미지의 특성을 수정합니다.다음은 약filter2D기능의 상세한 소개:

함수 프로토타입

OpenCV에서는filter2D함수의 프로토타입은 다음과 같습니다.

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

매개변수 설명

  • 출처: 이미지를 입력합니다.
  • 일광 절약 시간제: 출력 이미지, 입력 이미지src크기와 채널 수가 동일해야 합니다.
  • 깊이 : 출력 이미지의 원하는 깊이(데이터 유형)입니다. -1이면 출력 이미지가 입력 이미지와 동일한 깊이를 갖는다는 의미입니다.
  • 핵심 : 단일 채널 부동 소수점 행렬인 컨볼루션 커널(또는 필터)입니다. 이 행렬은 입력 이미지에 대해 컨볼루션 작업을 수행하는 방법을 정의합니다.
  • : 커널의 필터 포인트의 상대적 위치를 나타내는 커널의 앵커 포인트입니다. 앵커 포인트는 커널 내에 위치해야 합니다. 기본값(-1,-1)은 앵커 포인트가 커널 중앙에 위치함을 의미합니다.
  • 델타: 필터링된 픽셀을 저장할 때 사용할 선택적 값입니다.dst이전에 필터링된 픽셀에 추가되었습니다.
  • 테두리 유형 : 이미지 경계 외부의 픽셀을 처리하는 데 사용되는 픽셀 외삽 방법입니다. 컨볼루션 커널이 이미지 경계를 초과할 때 경계 픽셀이 처리되는 방법을 결정합니다.일반적인 옵션은 다음과 같습니다BORDER_CONSTANTBORDER_REPLICATEBORDER_REFLECT기다리다.

작동 원리

filter2D 이 함수는 실제로 컨볼루션 작업을 수행합니다(비록 기술적으로는 커널 뒤집기가 없기 때문에 엄격한 컨볼루션이 아닌 상관 관계를 계산하지만). 컨볼루션 작업에는 컨볼루션 커널을 입력 이미지 위로 "슬라이딩"하고 컨볼루션 커널과 동일한 크기의 각 하위 행렬의 해당 요소를 곱한 다음 결과를 추가하는 작업이 포함됩니다. 이 프로세스는 출력 이미지의 해당 위치에 배치되는 새로운 픽셀 값을 생성합니다. 컨벌루션 커널이 전체 입력 이미지 위로 미끄러지면서 전체 출력 이미지가 생성될 때까지 이 프로세스가 반복됩니다.

애플리케이션 시나리오

컨볼루션 커널을 변경함으로써,filter2D함수는 다음을 포함하되 이에 국한되지 않는 다양한 이미지 처리 효과를 얻을 수 있습니다.

  • 이미지 샤프닝: 특정 샤프닝 컨볼루션 커널을 사용하면 이미지의 가장자리를 더 선명하게 만들 수 있습니다.
  • 평균 필터: 평균 컨볼루션 커널을 사용하면 이미지 노이즈를 줄일 수 있지만 이미지가 흐려질 수 있습니다.
  • 가우스 필터 : 가우시안 필터링은 가장자리 정보를 유지하면서 이미지 노이즈를 줄일 수 있는 일반적으로 사용되는 이미지 스무딩 기술입니다.하지만filter2D함수 자체는 가우스 커널 생성을 직접 제공하지 않지만 전달될 수 있습니다.getGaussianKernel함수는 가우스 커널을 생성하고 다음을 사용합니다.filter2D가우스 필터링을 수행합니다.
  • 가장자리 감지: 특정 컨볼루션 커널(Sobel 연산자, Laplacian 연산자 등)을 설계하여 이미지의 가장자리를 감지할 수 있습니다.

샘플 코드

다음은 용도입니다filter2D함수 평균 필터링의 예제 코드(Python 버전):

#include