(재업) 외부로 부터 값을 읽어, 배열에 대입 후 비교하는 과정에 문제가 있어 도움을 부탁드립니다.

bongpjh의 이미지

프로그램을 작성중에 있어 궁금한 점이 생겨서 이렇게 문의 드립니다.
전에 글을 올렸는데 제가 적은 글이 이해가 안되게 적었나 싶어 다시 이렇게 글을 올립니다.

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 );
}   
qiiiiiiiip의 이미지

아래 글과 동일한 주제이고 이어지는 내용이면 아래 글에 답글로 다는게 좋았을텐데요..

지난번 답글 달때부터 지나치게 단순하다 싶었습니다만,

하시려는 내용은 low pass filtering 입니다.
low pass filtering을 구현하는 방법은 다양합니다.
목적에 맞는 것을 찾아서 써야합니다.

질문 올리신 것으로 미루어보아,
이론적인 지식도 많이 필요하고, 구현 능력도 많이 더 필요해보이는 상황이네요..

급한 일이시라면 전문가를 찾으심이 좋을 것 같습니다..

bongpjh의 이미지

글 내용이 미흡하여 수정하려다 보니, 수정버튼을 못찾게 되어, 이렇게 다시 글을 남기게 되었습니다.

네 조금 더 생각 좀 깊이 해보겠습니다.

qiiiiiiiip의 이미지

아마도 원하시는 목적의 가장 간단한 형태가 아래와 같을 듯 합니다.
단순한 retangular lpf 입니다.

FILTLEN은 어느정도나 smoothing할것인지를 control하는데 값 조정이 필요하고요

0/255를 symmetric하게 생각하는게 맞는지 (symmetric하게하려면 THRESHOD=255/2. )
맨 앞, 맨 끝 boundary는 어떻게 처리할지는 더 고민해야겠네요..

#include <stdio.h>
 
#define FILTLEN 9 // 무시하려는 연속된 0(또는 255)가 K개인 경우 2K+1로 둔다.
                  // 즉 연속된 4개를 무시하려면 9
#define THRESHOLD (255./2)
 
void lpf( unsigned char* in, int N, float* filt, int L, unsigned char* out )
{
    int i, j, k;
    float y;
    for ( k = 0 ; k < N ; k++ )
    {
        y = 0;
        for ( i = -L/2 ; i < L/2 + 1 ; i++ )
        {
            j = k + i;
            if ( j < 0 ) j = 0;
            if ( j >= N ) j = N - 1;
            y += in[j] * filt[i + L/2];
        }
        if ( y > THRESHOLD )
            out[k] = 255;
        else
            out[k] = 0;
    }
}
 
int main()
{
    unsigned char in[] = {255,255,255,0,255,255,255,
        255,255,255,255,0,0,255,255,255,255,0,0,0,255,255,255,255};
    int N = sizeof(in);
    unsigned char out[N];
    float filt[FILTLEN];
    int i;
 
    for ( i = 0 ; i < FILTLEN ; i++ )
        filt[i] = 1./FILTLEN;
 
    lpf( in, N, filt, FILTLEN, out );
 
    fprintf( stdout, "input :" );
    for ( i = 0 ; i < N ; i++ ) fprintf( stdout, "%3d ", in[i] );
    fprintf( stdout, "\n" );
 
    fprintf( stdout, "output:" );
    for ( i = 0 ; i < N ; i++ ) fprintf( stdout, "%3d ", out[i] );
    fprintf( stdout, "\n" );
 
    return 0;
}

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.