Main Content

medfilt1

1차원 중앙값 필터 적용

설명

y = medfilt1(x)는 차수가 3인 1차원 중앙값 필터를 입력 벡터 x에 적용합니다. 이 함수는 끝점을 벗어난 신호를 0으로 간주합니다. 출력값 yx와 길이가 동일합니다.

예제

y = medfilt1(x,n)은 차수가 n인 1차원 중앙값 필터를 x에 적용합니다.

y = medfilt1(x,n,blksz,dim) 또는 y = medfilt1(x,n,[],dim)은 필터가 연산을 수행하는 차원 dim을 지정합니다. blksz는 이전 버전과의 호환성을 위해 필요하며, 무시됩니다.

예제

y = medfilt1(___,nanflag,padding)은 위에 열거된 구문에 나와 있는 입력 인수 중 하나를 사용하여 각 세그먼트에서 NaN 값이 처리되는 방식을 지정합니다. 이 구문은 신호 경계에서 수행되는 필터 적용 유형인 padding도 지정합니다.

nanflagpadding은 함수 호출에서 x 이후의 아무 위치에나 나타날 수 있습니다.

예제

모두 축소

1초 동안 100Hz로 샘플링된 정현파 신호를 생성합니다. 주파수가 더 높은 정현파를 추가하여 잡음을 시뮬레이션합니다.

fs = 100;
t = 0:1/fs:1;
x = sin(2*pi*t*3)+0.25*sin(2*pi*t*40);

10차 중앙값 필터를 사용하여 신호를 평탄화합니다. 결과를 플로팅합니다.

y = medfilt1(x,10);

plot(t,x,t,y)
legend('Original','Filtered')
legend('boxoff')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original, Filtered.

주파수가 서로 다른 정현파로 구성된 2채널 신호를 생성합니다. 임의의 위치에 스파이크를 배치합니다. NaN을 사용하여 누락된 샘플을 임의로 추가합니다. 재현 가능한 결과를 얻기 위해 난수 생성기를 재설정합니다. 신호를 플로팅합니다.

rng('default')

n = 59;
x = sin(pi./[15 10]'*(1:n)+pi/3)';

spk = randi(2*n,9,1);
x(spk) = x(spk)*2;
x(randi(2*n,6,1)) = NaN;

plot(x)

Figure contains an axes object. The axes object contains 2 objects of type line.

디폴트 설정으로 medfilt1을 사용하여 신호에 필터를 적용합니다. 필터링된 신호를 플로팅합니다. 기본적으로, 이 필터는 누락된 샘플이 있는 모든 세그먼트의 중앙값에 NaN을 할당합니다.

y = medfilt1(x);
plot(y)

Figure contains an axes object. The axes object contains 2 objects of type line.

원래 신호를 전치합니다. 함수가 행을 따라 동작하도록 지정하여 신호에 다시 필터를 적용합니다. 중앙값을 계산할 때 누락된 샘플을 제외시킵니다. 두 번째 인수를 비워놓으면 medfilt1은 디폴트 필터 차수 3을 사용합니다.

y = medfilt1(x',[],[],2,'omitnan');
plot(y')

Figure contains an axes object. The axes object contains 2 objects of type line.

이 함수는 NaN만 포함하는 세그먼트에는 값을 할당할 수 없습니다. 세그먼트 길이를 늘려 이 문제를 해결하십시오. 이렇게 변경하면 이상값도 더욱 확실히 제거됩니다.

y = medfilt1(x,4,'omitnan');
plot(y)

Figure contains an axes object. The axes object contains 2 objects of type line.

디폴트 0 채우기를 수행하면 함수가 경계에 있는 신호 값을 과소 평가합니다. 감소하는 윈도우를 사용하여 끝에서 중앙값을 계산하는 방식으로 이 영향을 줄이도록 하십시오.

y = medfilt1(x,4,'omitnan','truncate');
plot(y)

Figure contains an axes object. The axes object contains 2 objects of type line.

입력 인수

모두 축소

입력 신호로, 실수 값 벡터, 행렬 또는 N차원 배열로 지정됩니다.

데이터형: single | double

1차원 중앙값 필터의 차수로, 양의 정수 스칼라로 지정됩니다.

  • n이 홀수이면 y(k)x(k-(n-1)/2:k+(n-1)/2)의 중앙값입니다.

  • n이 짝수이면 y(k)x(k-n/2:k+(n/2)-1)의 중앙값입니다. 이 경우, 함수는 수치를 정렬하고 정렬한 목록에서 정중앙 요소 두 개의 평균을 구합니다.

예: n = 11이면 y(k)x(k-5:k+5)의 중앙값입니다.

예: n = 12이면 y(k)x(k-6:k+5)의 중앙값입니다.

데이터형: double

필터를 적용할 차원으로, 양의 정수 스칼라로 지정됩니다. 기본적으로 이 함수는 x의 첫 번째 비한원소 차원을 따라 연산을 수행합니다. 특히, x가 행렬인 경우 이 함수는 y(:,i) = medfilt1(x(:,i),n)을 만족하도록 이 행렬의 열에 필터를 적용합니다.

데이터형: double

NaN 조건으로, 'includenan' 또는 'omitnan'으로 지정됩니다.

  • 'includenan'NaN을 포함하는 모든 세그먼트의 중앙값 또한 NaN이 되도록 필터링된 신호를 반환합니다.

  • 'omitnan'NaN을 포함하는 모든 세그먼트의 중앙값이 NaN이 아닌 값 간의 중앙값이 되도록 필터링된 신호를 반환합니다. 세그먼트의 모든 요소가 NaN이라면 결과는 NaN이 됩니다.

끝점 필터링으로, 'zeropad' 또는 'truncate'로 지정됩니다.

  • 'zeropad' — 끝점을 벗어난 신호를 0으로 간주합니다.

  • 'truncate' — 신호 경계에 도달한 경우 더 작은 세그먼트의 중앙값을 계산합니다.

출력 인수

모두 축소

필터링된 신호로, 실수 값 벡터, 행렬 또는 N차원 배열로 반환됩니다. yx와 같은 크기입니다.

데이터형: double

Image Processing Toolbox™의 라이선스가 있으면 medfilt2 (Image Processing Toolbox) 함수를 사용하여 2차원 중앙값 필터를 적용할 수 있습니다.

참고 문헌

[1] Pratt, William K. Digital Image Processing. 4th Ed. Hoboken, NJ: John Wiley & Sons, 2007.

확장 기능

버전 내역

R2006a 이전에 개발됨

참고 항목

| | | |