이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

imfilter

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

구문

B = imfilter(A,h)
gpuarrayB = imfilter(gpuArrayA,h)
___= imfilter(___,options,...)

설명

예제

B = imfilter(A,h)는 다차원 필터 h를 사용하여 다차원 배열 A를 필터링합니다. 배열 A는 임의의 클래스와 차원의, logical형 배열 또는 비희소 형식의 숫자형 배열일 수 있습니다. 결과 BA와 크기와 클래스가 같습니다.

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

예제

gpuarrayB = imfilter(gpuArrayA,h)는 GPU에서 연산을 수행합니다. gpuArrayA는 임의의 클래스와 차원의 logical형 배열 또는 비희소 형식 숫자형 배열을 포함한 gpuArray입니다. gpuArray와 함께 사용될 경우 H는 벡터이거나 2차원 행렬이어야 합니다. 이 구문을 사용하려면 Parallel Computing Toolbox™가 필요합니다.

예제

___= imfilter(___,options,...)는 지정된 옵션에 따라 다차원 필터링을 수행합니다.

예제

모두 축소

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

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

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

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

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

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

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

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

기본적으로 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

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

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

원본 영상

선형 카메라 모션을 근사화하는 데 사용할 수 있는 필터 h를 만듭니다.

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

imfilter를 사용해 이 필터를 영상 originalRGB에 적용하여 새 영상 filteredRGB를 만듭니다. 이 영상은 gpuArray로 반환됩니다.

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

필터링된 영상

imfilter는 입력 영상 배열과 동일한 데이터형의 배열을 출력한다는 점에서, 일부 다른 필터링 연산보다 메모리 사용이 더 효율적입니다. 이 예제에서 출력값은 uint8형 배열입니다.

whos
Name               Size               Bytes  Class       Attributes

  filteredRGB      384x512x3              108  gpuArray              
  h                 37x37               10952  double                
  originalRGB      384x512x3              108  gpuArray                    

필터링 연산을 다시 해봅니다. 이번에는 경계 replicate 옵션을 지정합니다.

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

replicate 경계 옵션이 적용된 영상

입력 인수

모두 축소

필터링할 영상으로, 임의의 클래스와 차원의 비희소 형식 숫자형 배열로 지정됩니다.

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

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

데이터형: double

필터링할 영상으로, gpuArray 객체로 지정됩니다. imfiltergpuArray와 함께 사용될 경우, gpuArrayA의 데이터형에 따라 단정밀도 부동소수점이나 배정밀도 부동소수점을 사용하여 gpuarrayB를 계산합니다. gpuArrayA가 배정밀도 값이나 uint32형 값을 포함할 경우 imfilter는 배정밀도 값을 사용합니다. 그 외 다른 모든 데이터형의 경우 imfilter는 단정밀도를 사용합니다. gpuarrayA가 정수이거나 논리형 배열이면, imfilter는 해당 유형의 범위를 초과하는 출력 요소를 자르고 소수 값을 반올림합니다.

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

경계선 옵션

옵션

설명

경계선 옵션

X

배열의 경계 밖에 있는 입력 배열 값은 암시적으로 값 X를 갖는 것으로 간주됩니다. 경계선 옵션이 지정되지 않으면, 디폴트 값은 0입니다.

'symmetric'

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

'replicate'

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

'circular'

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

출력 크기

'same'

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

'full'

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

상관관계와 컨벌루션 옵션

'corr'

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

'conv'

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

출력 인수

모두 축소

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

필터링된 영상으로, gpuarrayA와 크기와 클래스가 같은 gpuArray로 반환됩니다.

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

  • 대형 커널 즉, 큰 값을 포함한 커널을 지정하거나 큰 값을 포함한 영상을 지정할 경우, 부동소수점 데이터형에 codegen을 사용하여 생성된 코드와 MATLAB 간에 서로 다른 결과가 나타날 수 있습니다. 이는 서로 다른 알고리즘 구현 때문에 누적 오류가 발생했기 때문입니다.

확장 기능

R2006a 이전에 개발됨