피크 데이터 만 줄임으로써 어떻게 저역 통과 필터를 사용할 수 있습니까?


16

다음과 같은 제약 조건 / 품질 메트릭을 사용하여 필터를 저역 통과시키려는 2D 이미지가 있습니다.

  1. 이미지에 빛을 "추가"할 수 없으므로 결과의 각 픽셀은 <= 입력의 해당 픽셀이어야합니다.
  2. 저역 통과 차단 주파수는
  3. 이 필터를 반복해서 적용하면 결과가 크게 바뀌지 않아야합니다.
  4. 이 알고리즘을 실행하는 데 걸리는 시간 (5MPix 이미지의 경우 5 분이 합리적으로 보입니다)
  5. 필터링되는 빛의 양을 최소화합니다.

다음은 단점과 함께 시도한 몇 가지 접근법입니다.

  1. 가우스 필터는 보통과 같으며 결과를 끌어 내서 구속 조건 1을 준수합니다. 이는 처음 3 점과 매우 잘 맞지만 필요한 것보다 훨씬 많은 빛을 줄입니다.

  2. "낮은"지점을 통해 "위쪽"포물선과 그들 사이의 "아래쪽"포물선을 맞추면 부드럽게됩니다. 이것은 1D에서는 잘 작동하지만 먼저 수평으로 적용한 다음 수직으로 2D에서는 나쁜 결과를 생성합니다. 응용 프로그램에는 시간이 오래 걸리지 만 너무 오래 걸리지 않습니다. 그러나이 필터를 반복해서 적용하면 결과가 크게 변경됩니다. (1D) 입력이 완벽한 "하향"포물선 (전혀 필터링되지 않아야 함) 인 경우 시작 / 끝에 앉아있는 2 개의 "상향"포물선으로 대체됩니다.

  3. 다른 형태의 2D "기본"기능 및 선형 해석을 사용하여 최적의 매개 변수를 찾습니다. 이것은 현재 구현되고 테스트되지 않은 아이디어입니다.

신호 처리에 대한 나의 경험 영역은 거의 독점적으로 이미지 처리이므로, 다른 신호 처리 영역에서 활동하는 전문가의 의견을 통해이 문제에 대한 대안을 찾고자합니다.

2011/08/18 업데이트

현재의 반응에 기초하여, 나는 전형적인 입력의 그래프와 원래 설명한 3 가지 접근법의 결과 + 지금까지받은 제안을 추가하여 상황을 좀 더 명확하게하기로 결정했습니다. 쉬운 비교를 위해이 예제에서는 1D 필터링 만 사용했습니다.

입력 데이터: 입력 데이터

가우스 필터 + 요구 사항 (1)을 준수하도록 필터를 내 립니다.
아래로 내리면 오른쪽에 불필요한 빛이 줄어드는 것을 알 수 있습니다. 가우스 필터링

Parabolas
내가 아는 한, 이것은 매우 훌륭합니다. 슬프게도 첫 번째 가로, 세로를 적용하여 2D로 완벽하게 변환하지는 않습니다. 이 경우, 부동 소수점 분해능에서 적합 화 된 포물선을 평가할 수 있습니다. 이는 작은 이점이지만 절대적으로 필요한 것은 아닙니다. 포물선 피팅

그레이 스케일 침식
rwong의 제안에 따라 그레이 스케일 침식을 시도했습니다. 필자는 "적합한"포물선과 같은 포물선 모양의 구조 요소를 사용했습니다. 결과는 거의 동일하므로 유망한 것으로 보입니다. 그러나 여전히 몇 가지 문제가 있습니다. 1. 내 구조 요소가 "충분히"크지 않았습니다 (이미 너비가 801 픽셀 임에도 불구하고). 1. "상향"포물선 만 있고 "하향 포물선"이 없어서 하나의 포물선으로부터의 전환을 부드럽게합니다 다음에. 회색조 침식

중앙값 필터링
완전성을 위해서만 포함되어 있지만 실제로 원하는 것은 아닙니다. 중앙값 필터

원시 데이터
원시 입력 데이터 + 다양한 파이썬 명령을 pastebin에 붙여 넣었으므로 동일한 데이터로 실험 할 수도 있습니다.
http://pastebin.com/ASnJ9M0p


1
제한 1과 5에 대해 좀 더 설명해 주시겠습니까? 그것들은 (첫눈에) 모순되는 것처럼 보입니다.
Peter K.

"이 알고리즘"이 의미하는 바를 오해 할 수도 있지만 5MP의 5 분은 저역 통과 필터를 적용하는 데 많은 것처럼 보입니다.
bjoernz

답변:


8

실제로 시도 # 2를위한 2D 버전이 있습니다. 이론상 유사하지만 두 개의 1D 작업으로 분해 할 수 없습니다. "2D 회색조 형태 필터링"에 대해 읽으십시오. 커브 피팅보다 빠릅니다.

얼룩을 제거하려는 경우 중앙값 필터링도 유용 할 수 있습니다. 중간 필터링의 고급 형식은 "순서 필터링"입니다.

모든 경우에, 출력과 입력 사이의 픽셀 단위 최소값을 취함으로써 요구 사항 # 1을 간단하게 충족시킬 수 있습니다. 중요한 품질 기준이지만 알고리즘의 선택을 제한하지는 않습니다.


가우시안 필터링 (및 여러 가지 유용한 필터)을 분해 할 수 있지만 (먼저 2D에서 1D로 작업 한 다음 푸리에 변환을 통해) 분해 할 수없는 다른 유용한 이미지 처리 기술이 많이 있으므로 속도는 느려지지만 감소하지는 않습니다. 그들의 유용성.


그레이 스케일 형태소 필터링에 대한 포인터에 감사드립니다. 위키 백과에 대한 설명은 흥미로워 보입니다. 그러나 OpenCV 문서에 대한 링크에서 그레이 스케일 필터가 아닌 일반적인 형태 필터 만 보입니다. 이 옵션을 확실히 확인하고 결과를 알려 드리겠습니다. 감사.
피터 얀 버스 샤트

6
rwong의 중간 필터링 제안이 전혀 도움이됩니까? 간단한 데이터 예제와 발표하려는 "가짜"예제를 제시하여 달성하려는 것에 대해 조금 더 설명하면 도움이 될 수 있습니다.
Peter K.

샘플 데이터 + 다양한 제안의 결과로 내 질문을 업데이트했습니다. 지금 상황이 더 명확 해지기를 바랍니다.
Pieter-Jan Busschaert

2

스무딩 스플라인을 사용하는 것이 좋습니다.

Matlab File Exchange 의 강력한 스플라인 스무딩 기능 SMOOTHN (전체 소스 코드가 포함되어 있으므로 필요할 경우 다른 곳에서 다시 구현할 수 있음) 과 함께 Matlab을 사용하여이를 수행하는 방법은 다음과 같습니다 . n 차원 데이터에서도 작동합니다.

%# - get inputlist from pastebin

%# - smoothen data. Lower factor means less smooth
smoothingFactor = 1000;
smoothData = smoothn(inputlist,smoothingFactor);

%# - shift down
smoothData = smoothData - max(inputlist-smoothData);

%# - show results
plot(inputlist,'b'),hold on,plot(smoothData,'r')

여기에 이미지 설명을 입력하십시오


제안 해 주셔서 감사합니다. 조사하겠습니다. 귀하의 그래프에서 귀하의 예보다 훨씬 높은 smoothingFactor가 필요한 것 같습니다. x = 700 주위의 가파른 가장자리는 제거되지 않으며 선명하게 보입니다. 또한 x = [0,400]의 초기 범프는 전혀 제거되지 않습니다. 이것이 다른 (로우 패스 필터 + 아래로 이동) 접근 방식과 동일한 문제가 있다고 생각하지 않습니까? 두 그래프 사이의 전역 오프셋을 볼 수 있으며, 더 높은 smoothingFactor를 사용하면 더 커질 수 있습니다.
Pieter-Jan Busschaert

@ Pieter-JanBusschaert : 오, 나는 첫 번째 피크가 어떻게 든 당신에게 유용하다고 생각했습니다. 어쨌든 모든 저역 통과 필터 + 무브 다운은 ~ 650의 급격한 상승으로 어려움을 겪을 것입니다. 중간 스플라인 뒤에 중간 값 필터가 약간 도움이됩니다.
Jonas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.