圖形細線化 |
答題得分者是:ALTIS
|
caxton
一般會員 發表:5 回覆:3 積分:1 註冊:2007-02-09 發送簡訊給我 |
各位先進好:
我參考seeing大提供的範例程式,因為我要處理的是pgm圖檔,所以修改如下(細線化部份): <textarea cols="60" rows="10" class="cpp" name="code"> for (int k = 0; k < 4 ; k ) { for( int i = 1 ; i < infile.height - 1; i ) { for( int j = 1 ; j < infile.width - 1; j ) { Thin.mask[0] = (*(ptr (i - 1) * infile.width (j - 1)) == 0)?1:0; Thin.mask[1] = (*(ptr (i - 1) * infile.width j) == 0)?1:0; Thin.mask[2] = (*(ptr (i - 1) * infile.width (j 1)) == 0)?1:0; Thin.mask[3] = (*(ptr i * infile.width (j 1)) == 0)?1:0; Thin.mask[4] = (*(ptr (i 1) * infile.width (j 1)) == 0)?1:0; Thin.mask[5] = (*(ptr (i 1) * infile.width j) == 0)?1:0; Thin.mask[6] = (*(ptr (i 1) * infile.width (j - 1)) == 0)?1:0; Thin.mask[7] = (*(ptr i * infile.width (j - 1)) == 0)?1:0; Thin.mask[8] = Thin.mask[0]; //(*(ptr i * infile.width j) == 0)?1:0; if ((k % 4) == 0) { if((*(ptr i * infile.width j) == 0) && STEP_A(Thin.mask) && STEP_B(Thin.mask) && STEP_C(Thin.mask)) //if(STEP_A(Thin.mask) && STEP_B(Thin.mask) && STEP_C(Thin.mask)) { Thin.index[i][j] = true; //*(ptr1 i * infile.width j ) = 255; } else Thin.index[i][j] = false; } if ((k % 4) == 1) { if((*(ptr i * infile.width j) == 0) && STEP_A(Thin.mask) && STEP_B(Thin.mask) && STEP_D(Thin.mask)) //if(STEP_A(Thin.mask) && STEP_B(Thin.mask) && STEP_D(Thin.mask)) { Thin.index[i][j] = true; //*(ptr1 i * infile.width j ) = 255; } else Thin.index[i][j] = false; } if ((k % 4) == 2) { if((*(ptr i * infile.width j) == 0) && STEP_A(Thin.mask) && STEP_B(Thin.mask) && STEP_C_A(Thin.mask)) //if((*(ptr i * infile.width j) == 0) && STEP_A(Thin.mask) && STEP_B(Thin.mask) && STEP_C_A(Thin.mask)) { Thin.index[i][j] = true; //*(ptr1 i * infile.width j ) = 255; } else Thin.index[i][j] = false; } if ((k % 4) == 3) { if((*(ptr i * infile.width j) == 0) && STEP_A(Thin.mask) && STEP_B(Thin.mask) && STEP_D_A(Thin.mask)) //if(STEP_A(Thin.mask) && STEP_B(Thin.mask) && STEP_D_A(Thin.mask)) { Thin.index[i][j] = true; //*(ptr1 i * infile.width j ) = 255; } else Thin.index[i][j] = false; } } } for( int i = 1 ; i < infile.height - 1; i ) { for( int j = 1 ; j < infile.width - 1; j ) { if (Thin.index[i][j]) { //(ptr i * infile.width j ) = *(ptr1 i * infile.width j ); *(ptr i * infile.width j ) = 255; } } } } //--------------------------------------------------------------------------- bool __fastcall TForm1::STEP_A(int *ptr) { int count = 0; for (int i = 0; i < 8; i ) { if (ptr[i] == 1) count ; } if (count >= 2 && count <= 6) return true; else return false; } //--------------------------------------------------------------------------- bool __fastcall TForm1::STEP_B(int *ptr) { int count = 0; for (int i = 0; i < 8; i ) { if (ptr[i] == 0 && ptr[i 1] == 1) count ; } if (count == 1) return true; else return false; } //--------------------------------------------------------------------------- bool __fastcall TForm1::STEP_C(int *ptr) { if((ptr[1] * ptr[5] * ptr[7] == 0) && (ptr[1] * ptr[3] * ptr[7] == 0)) return true; else return false; } //--------------------------------------------------------------------------- bool __fastcall TForm1::STEP_D(int *ptr) { if((ptr[1] * ptr[3] * ptr[5] == 0) && (ptr[1] * ptr[3] * ptr[7] == 0)) return true; else return false; } //--------------------------------------------------------------------------- bool __fastcall TForm1::STEP_C_A(int *ptr) { if((ptr[1] * ptr[5] * ptr[7] == 0) && (ptr[3] * ptr[5] * ptr[7] == 0)) return true; else return false; } //--------------------------------------------------------------------------- bool __fastcall TForm1::STEP_D_A(int *ptr) { if((ptr[1] * ptr[3] * ptr[5] == 0) && (ptr[3] * ptr[5] * ptr[7] == 0)) return true; else return false; } //--------------------------------------------------------------------------- </textarea> 經二值化再細線化的結果如下圖: http://ss23.mcu.edu.tw/~s1160956/test.jpg 可以發現a和體似乎都不完全,而且迴圈再多跑幾次也沒有用 請問各位先進這其中可能出現什麼問題? 另外對於彩色圖檔要如何做細線化的效果呢? 先謝謝各位的回答。 |
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
|
ALTIS
初階會員 發表:4 回覆:26 積分:31 註冊:2005-04-28 發送簡訊給我 |
|
hipig
高階會員 發表:31 回覆:75 積分:111 註冊:2007-01-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |