(재업) 외부로 부터 값을 읽어, 배열에 대입 후 비교하는 과정에 문제가 있어 도움을 부탁드립니다.
프로그램을 작성중에 있어 궁금한 점이 생겨서 이렇게 문의 드립니다.
전에 글을 올렸는데 제가 적은 글이 이해가 안되게 적었나 싶어 다시 이렇게 글을 올립니다.
2048개의 배열이 있습니다. 외부카메라로부터 입력데이터를 배열[2048]에 저장을 해둡니다.
들어오는 입력값은 255(1), 0 2가지의 경우 입니다. 1은 255로 볼수 있습니다.
카메라의 입력을 받을때 외부잔상으로 인하여 값이 조금씩 헌팅?? 흔들리는 걸 볼 수 있어 보정을 해주는 알고리즘 작성중에 있습니다.
배열값에 가끔씩 흔들리는 값을 분석한 결과
255,255,255,0,255,255,255,255,255,255,255,0,0,255,255,255,255,0,0,0,255,255,255,255
이런 경우로 볼 수 있습니다. 최소 4개까지는 데이터가 아닌것으로 판단하여 위에 0값은 255로 바꾸어 주려고 합니다.
또한 반대의 경우도 생깁니다.
아래 코드의 경우는 2048개의 배열을 4개씩 분리하여, 0값이 많은지 255값이 많은지 판단하여, 많은 값을 적은 값에 넣어줍니다.
이런식으로 코드를 적용하다 보니, 4개씩 배열을 끊었을때 간혈적으로, 255,255,0,0 값이 들어올수도 있으며, (......255,255,255,0,0,0,0,0,0,0,0........)
실질적인 값이 맞는 경우에도 4개씩 비교 하다보니 데이터가 정확성이 조금 떨어지드라고요
이럴 경우 255값과 그 다음 255값 사이에 0값이 몇개가 있는지 비교하여, 4개 이하면 그 사이값을 255로 변경해주는 코드를 작성하려다 보니 어렵드라고요.
도움 좀 부탁드리겠습니다.
int if_zero_is_majority( unsigned char* in, int len ) { int i, count = 0; for ( i = 0 ; i < len ; i++ ) if ( in[i] == 0 ) count++; return ( count > len/2 ); } #define N 5 int main() { unsigned char data[2048]; int i, n; int num_blocks=2048/N; // fill data with noisy signals for ( n = 0, i = 0 ; n < num_blocks ; n++, i+= N ) if ( if_zero_is_majority( &data[i], N ) ) memset( &data[i], 0, N ); else memset( &data[i], 255, N ); }
아래 글과 동일한 주제이고 이어지는 내용이면 아래
아래 글과 동일한 주제이고 이어지는 내용이면 아래 글에 답글로 다는게 좋았을텐데요..
지난번 답글 달때부터 지나치게 단순하다 싶었습니다만,
하시려는 내용은 low pass filtering 입니다.
low pass filtering을 구현하는 방법은 다양합니다.
목적에 맞는 것을 찾아서 써야합니다.
질문 올리신 것으로 미루어보아,
이론적인 지식도 많이 필요하고, 구현 능력도 많이 더 필요해보이는 상황이네요..
급한 일이시라면 전문가를 찾으심이 좋을 것 같습니다..
감사합니다.
글 내용이 미흡하여 수정하려다 보니, 수정버튼을 못찾게 되어, 이렇게 다시 글을 남기게 되었습니다.
네 조금 더 생각 좀 깊이 해보겠습니다.
아마도 원하시는 목적의 가장 간단한 형태가 아래와
아마도 원하시는 목적의 가장 간단한 형태가 아래와 같을 듯 합니다.
단순한 retangular lpf 입니다.
FILTLEN은 어느정도나 smoothing할것인지를 control하는데 값 조정이 필요하고요
0/255를 symmetric하게 생각하는게 맞는지 (symmetric하게하려면 THRESHOD=255/2. )
맨 앞, 맨 끝 boundary는 어떻게 처리할지는 더 고민해야겠네요..
댓글 달기