Main Content

imfilter

다차원 영상의 N차원 필터링

설명

예제

B = imfilter(A,h)는 다차원 필터 h를 사용하여 다차원 배열 A를 필터링한 후 결과를 B로 반환합니다.

예제

B = imfilter(A,h,options,...)는 하나 이상의 지정된 옵션에 따라 다차원 필터링을 수행합니다.

예제

모두 축소

컬러 영상을 작업 공간으로 읽어 들인 후 표시합니다.

originalRGB = imread('peppers.png');
imshow(originalRGB)

Figure contains an axes object. The axes object contains an object of type image.

fspecial 함수를 사용하여 모션-블러 필터를 만듭니다.

h = fspecial('motion', 50, 45);

원본 영상에 이 필터를 적용하여, 모션 블러가 적용된 영상을 만듭니다. imfilter는 입력 영상 배열과 동일한 데이터형의 배열을 출력한다는 점에서, 일부 다른 필터링 함수보다 메모리 사용이 더 효율적입니다. 이 예제에서 출력값은 uint8형 배열입니다.

filteredRGB = imfilter(originalRGB, h);
figure, imshow(filteredRGB)

Figure contains an axes object. The axes object contains an object of type image.

영상을 다시 필터링합니다. 이번에는 replicate 경계 옵션을 지정합니다.

boundaryReplicateRGB = imfilter(originalRGB, h, 'replicate');
figure, imshow(boundaryReplicateRGB)

Figure contains an axes object. The axes object contains an object of type image.

기본적으로 imfilter는 상관을 사용하는데, 툴박스 필터 설계 함수가 상관 커널을 생성하기 때문입니다. 컨벌루션을 사용하려면 선택적 파라미터를 사용하십시오.

샘플 행렬을 만듭니다.

A = magic(5)
A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

필터를 만듭니다.

h = [-1 0 1];

디폴트 값인 상관을 사용하여 필터링합니다.

imfilter(A,h)
ans = 5×5

    24   -16   -16    14    -8
     5   -16     9     9   -14
     6     9    14     9   -20
    12     9     9   -16   -21
    18    14   -16   -16    -2

컨벌루션을 사용하여 필터링하고, imfilter에 선택적 파라미터를 지정합니다.

imfilter(A,h,'conv')
ans = 5×5

   -24    16    16   -14     8
    -5    16    -9    -9    14
    -6    -9   -14    -9    20
   -12    -9    -9    16    21
   -18   -14    16    16     2

이 예제에서는 입력값이 double형 클래스일 때 imfilter의 출력값이 음수 값을 갖습니다. 음수 값을 방지하려면 imfilter를 호출하기 전에 영상을 다른 데이터형으로 변환하십시오. 예를 들어, 입력 유형이 uint8형인 경우 imfilter는 출력값을 0에서 잘라냅니다. 영상 유형을 부호 있는 정수로 변환하는 것이 적절할 수도 있습니다.

A = magic(5)
A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

imfilter를 사용하여 영상을 필터링합니다.

h = [-1 0 1];
imfilter(A,h)
ans = 5×5

    24   -16   -16    14    -8
     5   -16     9     9   -14
     6     9    14     9   -20
    12     9     9   -16   -21
    18    14   -16   -16    -2

결과가 음수 값을 갖는 것을 알 수 있습니다. 출력 영상에서 음수 값을 방지하려면 필터링을 수행하기 전에 입력 영상을 uint8형으로 변환하십시오. imfilter에 대한 입력값이 uint8형 클래스이기 때문에, 출력값도 uint8형이며 imfilter는 음수 값을 0에서 잘라냅니다.

A = uint8(magic(5));
imfilter(A,h)
ans = 5x5 uint8 matrix

   24    0    0   14    0
    5    0    9    9    0
    6    9   14    9    0
   12    9    9    0    0
   18   14    0    0    0

입력 인수

모두 축소

필터링할 영상으로, 차원으로 구성된 숫자형 배열로 지정됩니다.

데이터형: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

다차원 필터로, double 데이터형의 N차원 배열로 지정됩니다.

데이터형: double

필터링 연산을 제어하는 옵션으로, 문자형 벡터, string형 스칼라 또는 숫자형 스칼라로 지정됩니다. 다음 표에는 지원되는 모든 옵션이 나와 있습니다.

경계선 옵션

옵션

설명

채우기 옵션

숫자형 스칼라 X

배열의 경계 밖에 있는 입력 배열 값에 값 X가 할당됩니다. 채우기 옵션이 지정되지 않으면, 디폴트 값은 0입니다.

'symmetric'

배열의 경계 밖에 있는 입력 배열 값은 배열 테두리를 기준으로 배열을 대칭 복사하여 계산됩니다.

'replicate'

배열의 경계 밖에 있는 입력 배열 값은 가장 가까운 배열 테두리 값과 같은 것으로 간주됩니다.

'circular'

배열의 경계 밖에 있는 입력 배열 값은 묵시적으로 입력 배열을 주기적이라고 간주하여 계산됩니다.

출력 크기

'same'

출력 배열은 입력 배열과 크기가 같습니다. 이는 출력 크기 옵션이 지정되지 않은 경우의 디폴트 동작입니다.

'full'

출력 배열은 완전히 필터링된 결과며, 따라서 입력 배열보다 크기가 더 큽니다.

상관과 컨벌루션 옵션

'corr'

imfilter는 상관을 사용하여 다차원 필터링을 수행합니다. 이는 filter2가 수행하는 필터링과 동일한 방식입니다. 상관 또는 컨벌루션 옵션이 지정되지 않으면, imfilter는 상관을 사용합니다.

'conv'

imfilter는 컨벌루션을 사용하여 다차원 필터링을 수행합니다.

출력 인수

모두 축소

필터링된 영상으로, 입력 영상 A와 크기 및 클래스가 같은 숫자형 배열로 반환됩니다.

  • 이 함수는 더 빠른 실행을 위해 데이터형 uint8, uint16, int16, singledouble에 하드웨어 최적화를 활용할 수 있습니다.

알고리즘

  • imfilter 함수는 배정밀도 부동소수점 연산방식을 사용하여 각 출력 픽셀의 값을 계산합니다. 그 결과가 데이터형의 범위를 벗어나면 imfilter는 결과를 해당 데이터형의 허용 범위에서 잘라냅니다. 결과가 정수 데이터형이면, imfilter는 소수 값을 반올림합니다.

  • 짝수 크기 h를 지정할 경우 커널의 중심은 floor((size(h) + 1)/2)입니다.

    예를 들어, 요소를 4개 가진 필터 [0.25 0.75 -0.75 -0.25]의 중심은 두 번째 요소 0.75입니다. 이 필터는 요소를 5개 가진 필터 [0 0.25 0.75 -0.75 -0.25]로 필터링하는 것과 동일한 결과를 제공합니다.

확장 기능

버전 내역

R2006a 이전에 개발됨

모두 확장