[問題] 關於影像細化~

看板C_and_CPP (C/C++)作者 (kiy)時間14年前 (2011/11/26 11:20), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串1/1
各位前輩好,小弟要將黑色的道路做細化,讓道路只剩骨架 ,但是圖出來好像沒有細化,反而有侵蝕效果,不知道是哪邊有問題?? 請各為前輩指點迷津一下~感謝~~ void th(Byte **a) { Byte **w; //新陣列,計算影像 int east, north, south, west, sum, i, j; w=new Byte *[ImgHeight]; for (int i=0; i<ImgHeight; i++) { w[i]=new Byte [ImgWidth]; } for ( i=1; i<ImgHeight-1;i++) { for ( j=1; j<ImgWidth-1;j++) { if (a[i][j]==0) //設黑色pixel為1,白色pixel為0 a[i][j]=w[i][j]=1; if (a[i][j]==255) a[i][j]=w[i][j]=0; } } for ( i=1; i<ImgHeight-1;i++) { for ( j=1; j<ImgWidth-1;j++) { int z1,z2,z3,z4,z5,z6,z7,z8,z9; z1 = a[i-1][j-1]; z2 = a[i-1][j]; z3 = a[i-1][j+1]; z4 = a[i][j-1]; z5 = a[i][j]; z6 = a[i][j+1]; z7 = a[i+1][j-1]; z8 = a[i+1][j]; z9 = a[i+1][j+1]; if (z5==1) { sum=z1+z2+z3+z4+z6+z7+z8+z9; if (sum>=3&&sum<=7) { int T=0; //依順時針掃0變1個數 if (z1==0&&z2==1) T++; if (z2==0&&z3==1) T++; if (z3==0&&z6==1) T++; if (z6==0&&z9==1) T++; if (z9==0&&z8==1) T++; if (z8==0&&z7==1) T++; if (z7==0&&z4==1) T++; if (z4==0&&z1==1) T++; if(T==1) { east=1; //為了平衡骨架,考慮東南西北細化程序 north=1; south=1; west=1; if(z2==0||z6==0||z8==0) east=0; if(z2==0||z4==0||z6==0) north=0; if(z4==0||z6==0||z8==0) south=0; if(z2==0||z4==0||z8==0) west=0; if (east==0&&north==0) w[i][j]=0; if (south==0&&west==0) w[i][j]=0; } } } } } for (i=1; i<ImgHeight-1;i++) { for (j=1; j<ImgWidth-1;j++) { if (w[i][j]==1) //將計算好的陣列丟給原陣列 w[i][j]=0; else w[i][j]=255; a[i][j]=w[i][j]; } } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.118.242.16

11/26 11:47, , 1F
會不會因為黑色可能是254以下,你都轉白了~
11/26 11:47, 1F
※ 編輯: kiyasuto1 來自: 1.171.217.114 (11/26 13:19) ※ 編輯: kiyasuto1 來自: 1.171.217.114 (11/26 13:36)

11/27 15:56, , 2F
可以稍微說一下 細化的演算法嗎~
11/27 15:56, 2F

11/27 18:49, , 3F
黑皮聖經有很詳細的說明
11/27 18:49, 3F
文章代碼(AID): #1Eq5iIDJ (C_and_CPP)
文章代碼(AID): #1Eq5iIDJ (C_and_CPP)