2009-07-05 3 views
1

어떤 모양으로 수렴하는 필터링 알고리즘이 있습니까? 내 문제는 내가 2 차원 그래프를 필터링하고 반복적으로 필터링을 적용한다는 것이다. 데이터를 다운 샘플링하고 가우스 필터 (발자국)를 사용하여 다시 샘플링하지만 그래프는 이후의 필터링마다 모양이 바뀝니다. 필요한 것은 최종 모양을 얻는 것입니다. 따라서 충분한 필터링을 한 후에는 그래프가 더 이상 모양을 변경하지 않습니다.모양을 잃지 않고 데이터를 어떻게 필터링합니까?

편집 : 필터링을하면 부드럽게 나오고 일부 정보는 삭제되지 않습니다.

답변

2

간단한 대답은 없습니다. 가우스 방식으로 수학적으로 필터링하면 가우시안으로 데이터를 컨볼 루션하는 것입니다. 그러나 convolving is the same as multiplying in the Fourier domain, 필터의 반복 적용은 푸리에 도메인에서 반복 곱셈과 같습니다. 여기에서 물건이 날아가거나 0으로 이동하는 것을 볼 수 있습니다. 이 작업을 수행하지 않는 필터라고 부르는 필터링이있을 수 있으며, 원하는 것을 수행 할 수있는 것을 만들거나 파낼 수 있지만, 가우스 또는 다른 커널을 사용하는 반복 된 컨볼 루션은 수렴하지 않습니다.

+0

알아 두어야 할 사항! 감사합니다 – AareP

+0

선형 필터에 대한 답이 맞지만 실제로는 "필터링이라고도하는 다른 항목", 즉 비선형 필터 클래스입니다. – Reunanen

0

이 문제에 대한 해킹 사실을 발견했습니다. 필자는 데이터를 반복적으로 필터링하지 않고 2d 그래프의 개별 값에 가중치 값을 다시 할당합니다. 이 가중치는 해당 그래프 위치에 얼마나 많은 필터링을 적용해야하는지 알려줍니다. 이 가중치는 또한 가우시안 필터의 너비 (값이 영향을 미치는 범위)를 알려줍니다. 다음은 그래프 값이 변경 될 때마다 실행해야하는 코드입니다.

vector<float> graph_values(100); 
vector<float> graph_weights(100); 
vector<float> graph_filtered_values(100); 

// temp 
vector<float> accumulated_weights(graph_values.size()); 


for(int x1=0;x1<graph_values.size();x1++) 
{ 
    graph_filtered_values[x1] = 0; 

    for(int x2=x1-30;x2<=x1+30;x2++) 
    { 
     float w = expf(-.5*(float)(x2-x1)*(x2-x1)/(graph_weights[x2]*graph_weights[x2])); 

     if(x2==x1&&!_finite(w)) 
      w = 1; 
     if(w<0.0001) 
      w = 0; 

     graph_filtered_values[x1] += graph_values[x2] * w; 

     accumulated_weights[x1] += w; 
    } 
} 

for(int x1=0;x1<graph_values.size();x1++) 
{ 
    graph_filtered_values[x1] /= accumulated_weights[x1]; 
} 

이 알고리즘은 graph_values, graph_weights 및 graph_filtered_values에 대해 3 배의 메모리를 사용합니다. 그래프 값이 더 이상 변경되지 않으면 최종 제품에서 첫 번째 두 배열을 삭제하여이 기능을 최적화 할 수 있습니다.

0

median filter을 사용해보십시오.

중간 값 필터는 신호를 부드럽게하는 데 사용되는 비선형 필터의 특수한 경우입니다. 메디아 필터의 출력은 항상 입력 샘플 중 하나이므로, 어떤 신호는 변경되지 않은 메디 언 필터를 통과 할 수 있다고 생각할 수 있습니다. 이 신호는 필터의 서명을 정의하며 루트 신호라고합니다. 메디아 필터는 컨버전스 속성을 가지고있는 것으로 알려져 있습니다. 즉, 중간 값 필터링을 반복하면 모든 입력 신호에서 시작하여 루트 신호가 발견됩니다.
(Burian Adrian, Kuosmanen Pauli: Tuning the smoothness of the recursive median filter, IEEE Transactions on Signal Processing 50(7), pp. 1631-1639, 2002)

관련 문제