imfilter
다차원 영상의 N차원 필터링
설명
예제
필터를 만든 후 적용하기
컬러 영상을 작업 공간으로 읽어 들인 후 표시합니다.
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와 컨벌루션을 사용하여 영상 필터링하기
기본적으로 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
입력 인수
A
— 필터링할 영상
숫자형 배열
필터링할 영상으로, 차원으로 구성된 숫자형 배열로 지정됩니다.
데이터형: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
h
— 다차원 필터
double
데이터형의 N차원 배열
다차원 필터로, double
데이터형의 N차원 배열로 지정됩니다.
데이터형: double
options
— 필터링 연산을 제어하는 옵션
문자형 벡터 | string형 스칼라 | 숫자형 스칼라
필터링 연산을 제어하는 옵션으로, 문자형 벡터, string형 스칼라 또는 숫자형 스칼라로 지정됩니다. 다음 표에는 지원되는 모든 옵션이 나와 있습니다.
경계선 옵션
옵션 | 설명 |
---|---|
채우기 옵션 | |
숫자형 스칼라 | 배열의 경계 밖에 있는 입력 배열 값에 값 |
| 배열의 경계 밖에 있는 입력 배열 값은 배열 테두리를 기준으로 배열을 대칭 복사하여 계산됩니다. |
| 배열의 경계 밖에 있는 입력 배열 값은 가장 가까운 배열 테두리 값과 같은 것으로 간주됩니다. |
| 배열의 경계 밖에 있는 입력 배열 값은 암시적으로 입력 배열을 주기적이라고 간주하여 계산됩니다. |
출력 크기 | |
| 출력 배열은 입력 배열과 크기가 같습니다. 이는 출력 크기 옵션이 지정되지 않은 경우의 디폴트 동작입니다. |
| 출력 배열은 완전히 필터링된 결과며, 따라서 입력 배열보다 크기가 더 큽니다. |
상관과 컨벌루션 옵션 | |
|
|
|
|
팁
이 함수는 더 빠른 실행을 위해 데이터형
uint8
,uint16
,int16
,single
및double
에 하드웨어 최적화를 활용할 수 있습니다.
알고리즘
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]
로 필터링하는 것과 동일한 결과를 제공합니다.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
imfilter
함수는 C 코드 생성을 지원합니다(MATLAB® Coder™가 필요함). 일반적인MATLAB Host Computer
대상 플랫폼을 선택할 경우imfilter
함수는 미리 컴파일된 플랫폼별 공유 라이브러리를 사용하는 코드를 생성합니다. 공유 라이브러리를 사용하면 성능 최적화가 유지되지만 코드를 생성할 수 있는 대상 플랫폼이 제한됩니다. 자세한 내용은 Types of Code Generation Support in Image Processing Toolbox 항목을 참조하십시오.코드를 생성할 때 입력 영상
A
는 2차원 또는 3차원이어야 합니다. 입력 인수options
의 값은 컴파일타임 상수여야 합니다.대형 커널
h
, 즉, 큰 값을 포함한 커널을 지정하거나 큰 값을 포함한 영상을 지정할 경우, 부동소수점 데이터형에 대해 생성된 코드와 MATLAB 간에 서로 다른 결과가 나타날 수 있습니다. 이는 서로 다른 알고리즘 구현 때문에 누적 오류가 발생했기 때문입니다.
GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
코드를 생성할 때 입력 영상
A
는 2차원 또는 3차원이어야 합니다. 입력 인수options
의 값은 컴파일타임 상수여야 합니다.대형 커널
h
, 즉, 큰 값을 포함한 커널을 지정하거나 큰 값을 포함한 영상을 지정할 경우, 부동소수점 데이터형에 대해 생성된 코드와 MATLAB 간에 서로 다른 결과가 나타날 수 있습니다. 이는 서로 다른 알고리즘 구현 때문에 누적 오류가 발생했기 때문입니다.CUDA® 툴킷 v9.0에서는 생성된 코드의 결과와 MATLAB의 결과 사이에 수치 불일치가 발생하는데, 이는 NVIDIA® 최적화의 버그로 인한 것입니다. 코드를 생성하기 전에 구성 객체(
cfg
)에 다음 플래그를 전달하는 방법으로 최적화를 끄는 우회적 해결 방법이 있습니다.cfg.GpuConfig.CompilerFlags = ‘-Xptxas -O0’
NVIDIA는 CUDA 툴킷 v9.1에서 이 버그를 수정할 계획입니다.
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고 및 제한 사항:
필터링 커널
h
는double
형의 벡터 또는 2차원 행렬이어야 합니다.GPU를 사용하여 영상을 필터링하면
imfilter
는A
의 데이터형에 따라 단정밀도 부동소수점 또는 배정밀도 부동소수점을 사용하여 각 출력 픽셀의 값을 계산합니다.A
가 배정밀도 값이나uint32
형 값을 포함할 경우imfilter
는 배정밀도 값을 사용합니다. 그 외 다른 모든 데이터형의 경우imfilter
는 단정밀도를 사용합니다.A
가 정수이거나 논리형 배열이면,imfilter
는 해당 유형의 범위를 초과하는 출력 요소를 자르고 소수 값을 반올림합니다.
자세한 내용은 GPU를 사용한 영상 처리 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨R2022b: 스레드 기반 환경 지원
imfilter
함수는 이제 스레드 기반 환경을 지원합니다.
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)