전역 한도 값 알고리즘 분석

7084 단어 알고리즘
최근 에 디지털 인식 을 하고 있 기 때문에 자동 한도 값 을 사용 해 야 합 니 다. 전체 한도 값 알고리즘 을 다시 보고 분석 을 여기에 적 었 습 니 다.
(바람 처럼 흐 르 는 CSDN 블 로 그 를 배 웠 습 니 다.http://blog.csdn.net/ilyhlf5201314/article/details/8525695)
1.  처리 절차:
             1. 전역 한도 값 을 위 한 초기 추정 값 T (그림 의 평균 그 레이스 케 일) 를 선택 하 십시오.             2. 그림 을 T 로 분할 합 니 다.두 개의 픽 셀 생 성: G1 은 그 레이스 케 일 값 이 T 보다 큰 픽 셀 로 구성 되 어 있 고 G2 는 T 픽 셀 보다 작은 것 으로 구성 되 어 있 습 니 다.             3. G1 과 G2 픽 셀 의 평균 그 레이스 케 일 m1 과 m2 를 계산 합 니 다.             4. 새로운 한도 값 계산 하기: T = (m1 + m2) / 2;             5. 2 와 4 절 차 를 반복 하여 연속 으로 교체 되 는 T 값 간 의 차 이 는 0 이다.
             이 방법 은 주로 이미지 직사 도 에 뚜렷 한 파 곡 이 있 는 데 적용 된다.
2. 프로그램 코드:
 1 //      

 2 //        T, T          T1 T2,  ,T=(T1+T2)/2,           

 3 u8 GlobalThreshold(u8 **img, u16 height, u16 width)

 4 {

 5     u8 pg[256] = {0};         //     

 6     u16 i,j,t=0,t1,t2,k1,k2;

 7     double u=0,u1,u2;

 8 

 9     //for (i = 0; i<256; i++) pg[i]=0;

10     for (i = 0; i<height; i++) //     

11     {

12         for (j = 0; j<width; j++)

13         {

14             pg[ img[i][j] ]++;

15         }

16     }

17             

18 

19     

20     for (i=0;i<256;i++)

21     {

22         t += pg[i];              //           

23         u += i * pg[i];          // i    * i     

24     }

25     k2 = (u16 )( u/t); //

26     

27     do {

28         k1 = k2;

29         t1 = 0; u1 = 0;

30         for (i = 0; i<=k1; i++)       //

31         {

32             t1 += pg[i];         //               

33             u1 += i * pg[i];

34         }

35 

36         t2 = t - t1;           //            

37         u2 = u - u1;           //           

38 

39         if (t1)

40             u1=u1/t1;     //          

41         else

42             u1=0;

43 

44         if (t2)

45             u2=u2/t2;    //          

46         else

47             u2=0;

48 

49         k2 = (u16 )((u1 + u2)/2 );    //      

50     }while( k1 != k2);        //

51 

52     return k1;

53 }

좋은 웹페이지 즐겨찾기