FIRkernelNxM 오퍼레이터

연산자 라이브러리: 필터

FIRkernelNxM 연산자는 각 픽셀 주위에 인접 픽셀을 포함하는 직사각형 커널 윈도우를 생성합니다. 커널의 크기는 출력 링크를 편집하여 정의할 수 있습니다. N은 커널의 행 수를 , M은 커널의 열 수를 나타냅니다.

[참고] FIR 필터 없음

이름과는 달리, 이 연산자는 FIR 필터와는 아무런 관련이 없습니다. 이 연산자는 필터 입력 데이터를 생성하는 데 사용될 수 있습니다.

커널을 생성하는 다른 연산자에는 다음이 있습니다. 연산자 LineNeighboursNx1 및 PixelNeighbours1xM입니다.

커널의 중심 요소는 항상 해당 위치의 원래 입력 픽셀을 나타냅니다. 픽셀 인덱스 x와 y, 커널 인덱스 m과 n을 갖는 출력 이미지 O는 다음과 같은 방식으로 입력으로부터 도출됩니다:

(각각 및

이미지 가장자리에서는 인접 픽셀이 정의되지 않습니다. 이 연산자는 EdgeHandling 매개변수를 사용하여 필요한 가장자리 처리 알고리즘을 정의할 수 있게 해줍니다.

크기가 짝수인 커널의 경우, 중앙 픽셀이 존재하지 않습니다. 이 경우 중앙 픽셀은 왼쪽 상단 모서리로 이동하게 되는데, 예를 들어 크기가 4x4인 커널의 경우, 다음 표에서 볼 수 있듯이 (1,1) 위치가 중앙 픽셀로 정의됩니다.

0,0 0,1 0,2 0,3
1,0 1,1 1,2 1,3
2,0 2,1 2,2 2,3
3,0 3,1 3,2 3,3

커널은 행과 열의 개수로 표현됩니다. VisualApplets 에서, N은 행의 개수를, M은 열의 개수를 나타냅니다. 종종 커널 요소는 좌표 대신 인덱스로 참조됩니다. 이 경우, 다음 표에 표시된 것처럼 행 단위로 순서가 정해집니다.

0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15

다음 예시는 3개의 커널 행과 3개의 커널 열에 대한 결합 결과를 보여줍니다. 그림에 표시된 연산자의 3x3 행렬은 각 커널의 내용을 정의하는 상대적 주소 지정 정보를 제공합니다. 출력의 각 3x3 클러스터는 픽셀별 서로 다른 커널 값을 보여줍니다.

픽셀별 커널 구성 대신, 이 예제에서는 결과로 얻어지는 서브커널을 보여줍니다. 인덱스 0에 있는 첫 번째 커널과 인덱스 8에 있는 마지막 커널입니다.

다음 예시는 커널 행 2개와 커널 열 2개를 조합했을 때의 결과 구성을 보여줍니다. 상대 주소가 오직 오른쪽이나 아래에 있는 인접 영역만을 참조하므로, 왼쪽이나 위쪽에 있는 콘텐츠에 대해서는 가장자리 처리를 수행할 필요가 없습니다.

홀수와 짝수 커널 크기를 사용한 마지막 두 예제를 비교해 보면, edgeMirroring 모드에서 edgeHandling 기능의 뚜렷한 동작을 확인할 수 있습니다. 짝수 및 홀수 커널 크기에 대한 edgeMirroring은 상단 및 왼쪽 경계에서는 동일하게 처리되지만, 하단 및 오른쪽 경계에서는 약간 다른 결과를 나타냅니다. 출력 이미지 크기가 크기 때문에, 첫 번째(오른쪽 상단) 및 마지막(오른쪽 하단) 입력 픽셀에 대한 구성 결과와 커널당 산출된 값만 제시합니다:

홀수 커널 크기에 대한 에지 미러링은 데이터가 누락된 영역을, 데이터가 있는 등거리 영역의 데이터로 채웁니다. 경계는 보존되며 복제되지 않습니다. 이 같은 원리는 짝수 커널 크기의 경우 영역을 위쪽이나 왼쪽으로 채울 때에도 적용됩니다. 이와는 대조적으로, 영역을 아래쪽이나 오른쪽으로 채울 때는 미러링 과정에서 경계 영역이 복제됩니다. 다시 말해, 이는 짝수 커널 크기의 경우에만 발생합니다.

[팁] 균일한 커널 크기를 위한 EdgeMirroring

커널 크기가 짝수인 경우, 영역을 아래쪽이나 오른쪽 끝까지 채우면 미러링 시 테두리가 복제됩니다.

기술적으로, 이 연산자는 커널에 필요한 픽셀을 병렬로 출력할 수 있을 때까지 대기하며 버퍼링합니다. 따라서, 입력 측에서 해당 픽셀에 필요한 모든 인접 픽셀이 처리된 후에야 픽셀을 출력할 수 있으므로, 이 연산자는 지연을 유발합니다. 라인 지연은 다음과 같습니다:

오퍼레이터 제한 사항

  • ImageWidth < 2*Parallelism is not allowed.

  • 빈 이미지, 즉 픽셀이 전혀 없는 이미지는 허용되지 않습니다.

  • 빈 줄이나 줄 길이가 제각각인 경우는 허용되지 않습니다.

I/O Properties

Property Value
Operator Type M
입력 링크 I, data input
출력 링크 O, 커널 출력

지원되는 Link Format

Link Parameter Input Link I Output Link O
Bit Width any1 as I
Arithmetic {unsigned, signed} as I
Parallelism {1, 2, 4, 8, 16, 32, 64} as I
Kernel Columns 1 any2
Kernel Rows 1 any3
Img Protocol {VALT_IMAGE2D, VALT_LINE1D}4 as I
Color Format any as I
Color Flavor any as I
Max. Img Width any as I
Max. Img Height any as I

1

입력 Bit Width의 범위는 다음과 같습니다:

  • 부호 없는(unsigned) 입력의 경우: [1, 64]

  • 부호 있는(signed) 입력의 경우: [2, 64]

  • 부호 없는(unsigned) 컬러 입력의 경우: [3, 63]

  • 부호 있는(signed) 컬러 입력의 경우: [6, 63]

4

VALT_LINE1D 이미지 프로토콜을 사용하는 경우, 연산자의 유형은 M이 아닌 P가 됩니다.

2

OutputKernelColumns <= ImageWidth

3

OutputKernelRows <= ImageHeight

Parameters

EdgeHandling
Type static parameter
Default EdgeMirrored
Range {EdgeMirrored, EdgeConstant}

이미지의 가장자리에서는 커널을 생성할 인접 요소가 존재하지 않습니다. 이 경우, 연산자는 두 가지 가장자리 처리 모드에서 사용할 수 있습니다:

EdgeMirrored 모드에서는 이미지 가장자리에 미러링된 픽셀이 사용됩니다.

EdgeConstant 모드에서는 가장자리에 누락된 커널 요소가 상수 값으로 채워집니다. 이 값은 Constant 매개변수를 사용하여 정의할 수 있습니다.

상수
Type static parameter
Default 0
Range 입력 링크 I의 범위

EdgeHandling 매개변수가 EdgeConstant로 설정된 경우, 이 매개변수는 이미지 경계 밖의 픽셀에 대한 기본값을 정의합니다.

색상 형식의 경우, 이 값은 모든 색상 구성 요소의 이진 표현을 결합한 부호 없는 정수입니다.

사용 예

다음 예제에서는 연산자 FIRkernelNxM의 사용법을 보여줍니다: