1#ifndef __JBXL_CPP_THINNING_H_
2#define __JBXL_CPP_THINNING_H_
43 int i, j, k, l, m, n, w, b, nn, mm;
53 if (mode!=26) mode = 6;
64 for (i=0; i<gd.
xs*gd.
ys*gd.
zs; i++) {
67 dd =
Min(dd, gd.
gp[i]);
68 rr =
Max(rr, gd.
gp[i]);
76 for (k=1; k<gd.
zs-1; k++) {
78 for (j=1; j<gd.
ys-1; j++) {
80 for (i=1; i<gd.
xs-1; i++) {
83 w = gd.
gp[n+1]*gd.
gp[n-1]*gd.
gp[n+xs]*gd.
gp[n-xs]
84 *gd.
gp[n+ps]*gd.
gp[n-ps];
87 ld.lv = (int)gd.
gp[n];
102 if (px->ldat.lv<=dd) {
103 dt =
deletable(gd, px->ldat.id, mode, 3);
107 tList* pv = px->prev;
111 else px->ldat.lv = m/3 + 7;
122 for (b=7; b<=15; b++) {
125 if (px->ldat.lv==b) {
126 dt =
deletable(gd, px->ldat.id, mode, 3);
130 tList* pv = px->prev;
138 tList* pv = px->prev;
144 ld.lv = (int)gd.
gp[ld.id];
150 ld.lv = (int)gd.
gp[ld.id];
154 if (gd.
gp[i+xs]>20) {
156 ld.lv = (int)gd.
gp[ld.id];
160 if (gd.
gp[i-xs]>20) {
162 ld.lv = (int)gd.
gp[ld.id];
166 if (gd.
gp[i+ps]>20) {
168 ld.lv = (int)gd.
gp[ld.id];
172 if (gd.
gp[i-ps]>20) {
174 ld.lv = (int)gd.
gp[ld.id];
193 if (px->ldat.lv>20) {
194 dd =
Min(dd, px->ldat.lv);
202 if (px->ldat.lv==16) mm++;
206 }
while (dd<rr || mm!=nn);
208 vp.setup(gd.
xs, gd.
ys, gd.
zs);
209 for (i=0; i<gd.
xs*gd.
ys*gd.
zs; i++) vp.
gp[i] = (T)gd.
gp[i];
224 if (vp.
gp[n+1] !=0) m++;
225 if (vp.
gp[n-1] !=0) m++;
226 if (vp.
gp[n+xs] !=0) m++;
227 if (vp.
gp[n-xs] !=0) m++;
228 if (vp.
gp[n+ps] !=0) m++;
229 if (vp.
gp[n-ps] !=0) m++;
230 if (vp.
gp[n+1+xs] !=0) m++;
231 if (vp.
gp[n+1-xs] !=0) m++;
232 if (vp.
gp[n-1+xs] !=0) m++;
233 if (vp.
gp[n-1-xs] !=0) m++;
234 if (vp.
gp[n+1+ps] !=0) m++;
235 if (vp.
gp[n+1-ps] !=0) m++;
236 if (vp.
gp[n-1+ps] !=0) m++;
237 if (vp.
gp[n-1-ps] !=0) m++;
238 if (vp.
gp[n+xs+ps] !=0) m++;
239 if (vp.
gp[n+xs-ps] !=0) m++;
240 if (vp.
gp[n-xs+ps] !=0) m++;
241 if (vp.
gp[n-xs-ps] !=0) m++;
242 if (vp.
gp[n+1+xs+ps]!=0) m++;
243 if (vp.
gp[n+1+xs-ps]!=0) m++;
244 if (vp.
gp[n+1-xs+ps]!=0) m++;
245 if (vp.
gp[n+1-xs-ps]!=0) m++;
246 if (vp.
gp[n-1+xs+ps]!=0) m++;
247 if (vp.
gp[n-1+xs-ps]!=0) m++;
248 if (vp.
gp[n-1-xs+ps]!=0) m++;
249 if (vp.
gp[n-1-xs-ps]!=0) m++;
270 int i, j, k, l, m, lz, ly, mz, my;
277 for (j=-1; j<=1; j++) {
280 for (i=-1; i<=1; i++) {
283 if (vp.
gp[m]!=0) v[l] = 1;
292 for (k=-1; k<=1; k++) {
294 mz = n + k*vp.
xs*vp.
ys;
295 for (j=-1; j<=1; j++) {
298 for (i=-1; i<=1; i++) {
301 if (vp.
gp[m]>0) v[l] = 1;
309 if (cn==-1 || cn!=1)
return false;
313 for(i=0; i<mm; i++) v[i] = 1 - v[i];
316 nh = v[10] + v[12] + v[14] + v[16] + v[4] + v[22];
317 if (nh<=3) ret =
true;
MSGraph用 数学ライブラリ ヘッダ in Graph Library.
int zs
zサイズ. 4Byte. 2Dの場合は 1.
void free(void)
グラフィックデータを開放する
int connectNumber(int *w, int c, int d)
MSGraph< int > euclidDistance(MSGraph< T > vp, int bc, int &rr)
int nonZeroBoxel(MSGraph< T > vp, int n)
MSGraph< T > centerLine(MSGraph< T > gx, int mode)
bool deletable(MSGraph< T > vp, int n, int c, int d)
MSGraph< T > CenterLine(MSGraph< T > gx, int mode)
tList * add_tList_node_bydata(tList *pp, tList_data ldat)
データ(ldat)からリスト用ノードを生成し(new),それを指定したリストの後ろに追加.
tList * del_tList_node(tList **node)
リスト用のノードを削除.
tList_data init_tList_data(void)
空のノードデータを静的に作成.データを初期化するのに使用する.
tList * new_tList_node(void)
リスト用の空ノードを動的に生成する.