다중if문 구조의 최소화 할려면 어떻게 해야하는지 조언 좀 부탁드립니다.
글쓴이: bongpjh / 작성시간: 목, 2013/10/10 - 9:46오전
배열의 공간은 2048개의 unsigned char로 할당 되어 있습니다.
일차원배열 공간에 노이즈신호가 유입이 됨으로써 이 노이즈신호를 제거해고자 다중if문으로 처리하였는데 효율성도 없을 뿐더러 코드 읽었을떄 복잡함이 있습니다.
예를들어 아래와 같이 경우의 수가 몇가지 있습니다. 이런것을 조금 원만하게 코드를 짤 방법은 없나요?
경우의 수[1] = 255,255,255,0,255,255 배열[3] - > 255로 변경이 되어야 한다.
경우의 수[2] = 255,255,255,0,0,255,255 배열[3],배열[4] - > 255로 변경이 되어야 한다.
경우의 수[3] = 0,0,255,0,0,0,0 배열[2] - > 0 로 변경이 되어야 한다.
경우의 수[4] = 0,0,255,255,0,0,0 배열[2], 배열[3] - > 0 로 변경이 되어야 한다.
if(Camera_InBuffer[i-1]==255 && Camera_InBuffer[i-2]==255) { if(Camera_InBuffer[i+1]==255 && Camera_InBuffer[i]==0) { Camera_InBuffer[i]=255; } } if(Camera_InBuffer[i-1]==0 && Camera_InBuffer[i-2]==0) { if(Camera_InBuffer[i+1]==0 && Camera_InBuffer[i]==255 ) { Camera_InBuffer[i]=0; } } if((Camera_InBuffer[i-1]==255 && Camera_InBuffer[i-2]==255 )) { if(Camera_InBuffer[i]==0 && Camera_InBuffer[i+1]==0) { if(Camera_InBuffer[i+2]==255 && Camera_InBuffer[i+3]==255) { Camera_InBuffer[i] = 255; Camera_InBuffer[i+1] =255; } } }
Forums:
작성하신 코드대로라면..
255,0,255,0,255,0,255,255 가 되어버리는 경우라면 배열안의 모든 값의 갯수만큼 if문이 생겨야 오류가 없을것 같습니다.
하나의 스테이터스 값(?)을 이용해보는게 어떠실런지 생각합니다. STATUS=0; 에서 출발하여 255값일 경우 +1, 0일경우 -1을 하여 최종적으로 나오는 STATUS값이 0 초과일때는 전체 배열을 255로, 0 미만일때는 0으로 초기화 하면 될것 같습니다.
배열의 값이 255, 0, 255, 0, 255, 255, 0, 255, 0, 0, 255 일 경우,
STATUS의 값은 1, 0, 1, 0, 1, 2, 1, 2, 1, 0, 1 이 되어 최종적으로 1이라는 0 초과의 값이 나오기 때문에 전체 배열을 255로 초기화하는..
명령어의 내부 동작이 어떻게 되는지는 몰라서 더 효율적인 방법은 생각나지 않지만, if문의 중첩보다는 빠를것 같습니다.
감사합니다.
답변 감사합니다.
현재 morolty님께서 알려주신 방법대로 했는데 정상적으로 잘 됩니다. 또 한번 감사드립니다.
한가지만 더 여쭈어보겠습니다. 배열값이 2048개인데 이 전체 배열을 status 음수 양수가 아닌 배열 2048개를 5개씩 순차적으로 비교하게 할 순 없을가요?
제가 이해한 내용이 맞는지 모르겠습니다만..
array[0]~array[4] 비교하여 255 혹은 0으로 초기화
array[5]~array[9] 비교하여 255 혹은 0으로 초기화
.....
이런식으로 2048개의 배열을 5개 단위로 255 혹은 0 의 형태로 바꾸려고 하시는건가요?
마지막에 남는 3개의 배열은 어떻게 처리하실지는 저는 잘 모르겠습니다만..
정도가 될까요? 다른분이 더 효율적이게 짜주실지도 모릅니다.
노이즈 신호를 어떻게 정의하냐가 문제겠네요.
패턴이 255와 0 밖에 없다면..
아래 코드처럼 쉽게 알아보도록 해서 작업하는게 나중을 위해서 나을거 같아서 짜봤어요..
찾기만 하는 코드라서 수정하는 부분은 추가하셔야 할꺼에요..
패턴이 추가될수도 있으니 이렇게 작업해야 나중에 노이즈 패턴만 따로 때어서 작업하기 편할 꺼 같네요.
전체 배열을 길의 N의 여러 블록으로 나누어,
전체 배열을 길이 N의 여러 블록으로 나누어,
각 블록별로 N개 안에 N/2 개 초과의 0이 있으면 전체를 0으로,
그렇지 않으면 전체를 255로 채우겠다는 의도로 이해가 되네요.
이게 맞다면 아래와 같이 코딩해도 될 듯요..
댓글 달기