<

이미지 프로세싱에서 Tolerance와 Threshold 두 용어가 의미와 해석이 모호해서 매번 사전 검색을 했는데 이번에 정리해본다.


  • Tolerance - 허용치, 허용오차..

주변의 설정된 값(Tolerance)보다 작은 픽셀들은 같은 색상의 픽셀로 간주하고 검출함.

값이 높을수록 색상 범위가 넓어짐..

사실, 이미지 프로세싱에서 Tolerance의 종류가 다양한데 그 종류는 다양해도 의미는 비슷하다. Tolerance 값 안에 들어오면 같은 부류(?)로 해석하고 검출한다는것.

  • Threshold - 임계값, 한계값 등으로 해석됨. 

주로 바이너리 이미지(Binary Image) 검출에 많이 사용된다.


설정된 값(Threshold) 보다 낮은 값의 픽셀은 black으로, 높은 광도의 픽셀은 White로 치환한다.

Original imageOriginal imageExample of a threshold effect used on an imageExample of a threshold effect used on an image

image from wikipedia.

PC에 Geforce Experence가 설치되어 있는지 확인하자.

단축기가 동일해서 VS에서 안먹히는 경우가 있다.

가장 빠른 방법은  Geforce Experence 삭제.

MFC의 트리메뉴 컨트롤의 아이템 선택 이벤트 후 해당 선택된 아이템의 인덱스를 리턴하는 메소드가 없다.


편법으로 아이템 이름으로 찾는 방법도 있지만 코드가 길어지고 추가/수정이 복잡해진다.


구글링 결과 index를 구하는 방법을 찾았다.


OnTvnSelchanged 이벤트 메소드에서 child 아이템을 루프 태우면서 현재 선택된 item인지 체크하면서 증가 시키는 것이다.


이생각을 왜 못했는지..


코드의 일부는 아래와 같다. 전체는 출처로 이동해서 확인하길 바란다.


 
    int index = 0;
    HTREEITEM hItem = m_treeCtrl.GetSelectedItem();
    HTREEITEM hChild = m_treeCtrl.GetChildItem(NULL);
    while (hChild)
    {
        if (hChild == hItem) break;
        hChild = m_treeCtrl.GetNextItem(hChild, TVGN_NEXT);
        ++index;
    }
출처 : C++/(MFC)트리 컨트롤 몇 번째 아이템인지 조회


이미징프로세싱을 하는 프로그램을 짜다 보면 테스트나 기타 목적으로 사이즈에 맞는 이미지가 필요할 때가 있다.


이때 구글 검색을 통해서 하는 방법도 있겠지만


좀더 간편하고 바로 얻을 수 있는 방법이 있어 이곳에 기록한다.


사이트 주소는 https://picsum.photos/ 이며


이미지 획득 주소는 아래와 같다


https://picsum.photos/200/300

200은 width이며 300은 height이다


사이트에 가면 좀 더 많은 기능들이 소개되어 있으니 참고하자.

영상처리에 보통 그레이스케일 레벨 이미지가 이용되는데 사이즈 앞에 /g/만 추가해주면 바로 얻을 수 있다.


아쉽게도 jpg 이미지만 제공한다.

bmp는 픽픽이나 그림판으로 변형해서 사용해야한다..

시리얼 통신이나 소켓통신을 할때 커맨드의 머리와 꼬리에 제어문자를 넣어줘야 하는 경우가 있다.


(커맨드의 시작과 끝을 알수 있도록 하기 위함..)


위키백과에 정리된 내용이 있어 가져왔다.


자주 쓰는 문자는 볼드 처리..


2진법10진법8진법16진법문자설명
0000 000000000000NULNULL 문자
0000 000100100101SOH헤더 시작(Start Of Header)
0000 001000200202STX본문 시작, 헤더 종료(Start of TeXt)
0000 001100300303ETX본문 종료(End of TeXt)
0000 010000400404EOT전송 종료, 데이터 링크 초기화(End Of Transmission)
0000 010100500505ENQ응답 요구(ENQuiry)
0000 011000600606ACK긍정응답(ACKnowledge)
0000 011100700707BEL경고음(BELl)
0000 100000801008BS백스페이스(BackSpace)
0000 100100901109HT수평 탭(Horizontal Tab)
0000 10100100120ALF개행(Line Feed)
0000 10110110130BVT수직 탭(Vertical Tab)
0000 11000120140CFF다음 페이지(Form Feed)
0000 11010130150DCR복귀(Carriage Return)
0000 11100140160ESO확장문자 시작(Shift Out)
0000 11110150170FSI확장문자 종료(Shift In)
0001 000001602010DLE데이터전송 중단(Data Link Escape)
0001 000101702111DC1장치 제어(Device Control 1)
0001 001001802212DC2장치 제어(Device Control 2)
0001 001101902313DC3장치 제어(Device Control 3)
0001 010002002414DC4장치 제어(Device Control 4)
0001 010102102515NAK부정응답(Negative AcKnowledge)
0001 011002202616SYN동기(SYNnchronous idle)
0001 011102302717ETB전송블록 종료(End of Transmission Block)
0001 100002403018CAN취소(CANcel)
0001 100102503119EM매체 종료(End of Medium)
0001 10100260321ASUB치환(SUBstitute)
0001 10110270331BESC제어기능 추가(ESCape)
0001 11000280341CFS파일경계 할당(File Seperator)
0001 11010290351DGS레코드 그룹경계 할당(Group Seperator)
0001 11100300361ERS레코드경계 할당(Record Seperator)
0001 11110310371FUS장치경계 할당(Unit Seperator)


프로그램을 짜다 보면 랜덤한 스트링을 사용해야 할 때가 간혹 있다.


보통 테스트를 할때 임의의 문자열 값이 필요할때가 그렇다.


C++ 로 짤때에는 char 배열에 a부터 z, 0부터 9 넣고

랜덤시드로 한개씩 찝어서 길이에 맞춰 스트링으로 만드는 함수를 사용했었다.



C#도 마찬가지로 비슷하게 작성해봤다.


        
private static Random random = new Random((int)DateTime.Now.Ticks & 0x0000FFFF); //랜덤 시드값

public static string RandomString(int _nLength = 12)
        {
            const string strPool = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";  //문자 생성 풀
            char[] chRandom = new char[_nLength];

            for (int i = 0; i < _nLength; i++ )
            {
                chRandom[i] = strPool[random.Next(strPool.Length)];
            }
            string strRet = new String(chRandom);   // char to string
            return strRet;
        }



  1. 2018.09.14 15:18

    비밀댓글입니다

+ Recent posts