[問題] 關於影像細化~
各位前輩好,小弟要將黑色的道路做細化,讓道路只剩骨架
,但是圖出來好像沒有細化,反而有侵蝕效果,不知道是哪邊有問題??
請各為前輩指點迷津一下~感謝~~
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
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
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章