全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2556
推到 Plurk!
推到 Facebook!

圖形細線化

答題得分者是:ALTIS
caxton
一般會員


發表:5
回覆:3
積分:1
註冊:2007-02-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-14 18:25:26 IP:140.122.xxx.xxx 訂閱
各位先進好:

我參考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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-15 13:58:03 IP:220.135.xxx.xxx 訂閱
檢查一下處理時的影像長寬,因為從你的圖來看,只處理正方形部分。
ALTIS
初階會員


發表:4
回覆:26
積分:31
註冊:2005-04-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-26 14:26:29 IP:210.201.xxx.xxx 訂閱
另外對於彩色圖檔要如何做細線化的效果呢?


彩色圖檔 -> 灰階圖檔 -> 黑白圖檔
------
城市讓人迷惘 我在湖岸看見希望
妳的眼神是一道光芒 開啟我心中的收藏
hipig
高階會員


發表:31
回覆:75
積分:111
註冊:2007-01-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-26 16:15:08 IP:140.126.xxx.xxx 未訂閱
彩色->灰階->二值化->骨架化
彩色->灰階->反像->骨架化
彩色->灰階->骨架化
主要看你程式怎麼寫骨架化的方式
系統時間:2024-05-03 3:32:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!