Foros: ドキュメント作成 (Thread #35504)

【API関連】lmrcImageTrimingのtimesについて (2014-05-26 14:05 by kinoshita-eos #73162)

【疑問点】
lmrcImageTrimingのtimesの用途が分かりませんでした。timesは繰り返し回数を指していると推測していますが、現在のコードではtimes回数のfor文内で入力ファイルsrcから周辺が0(付近)でないデータのみを出力ファイルdstにしていますが、srcは読み込み、dstは書き出しのみに使用されていますので、繰り返してもデータに変化がないと思います。

【ファイル名】
src/Objects/DataManip/mrcImage/src/lmrcImageTriming.c

【該当箇所】25行目以降

for(i=0; i<times; i++) {
for(x=0; x<src->HeaderN.x; x++) {
for(y=0; y<src->HeaderN.y; y++) {
for(z=0; z<src->HeaderN.z; z++) {
mrcPixelDataGet(src, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
if(fabs(data-1.0)<1e-6) { /* On Object */
switch(neighbor) {
case 8:
mrcPixelDataGet(src, x-1, y-1, z, &data5, mrcPixelRePart, mrcPixelHowNearest);
mrcPixelDataGet(src, x+1, y-1, z, &data6, mrcPixelRePart, mrcPixelHowNearest);
mrcPixelDataGet(src, x-1, y+1, z, &data7, mrcPixelRePart, mrcPixelHowNearest);
mrcPixelDataGet(src, x+1, y+1, z, &data8, mrcPixelRePart, mrcPixelHowNearest);
case 4:
mrcPixelDataGet(src, x-1, y, z, &data1, mrcPixelRePart, mrcPixelHowNearest);
mrcPixelDataGet(src, x+1, y, z, &data2, mrcPixelRePart, mrcPixelHowNearest);
mrcPixelDataGet(src, x, y-1, z, &data3, mrcPixelRePart, mrcPixelHowNearest);
mrcPixelDataGet(src, x, y+1, z, &data4, mrcPixelRePart, mrcPixelHowNearest);
break;
default:
fprintf(stderr, "Not supported Neighbor: %d\n", neighbor);
return;
}
switch(neighbor) {
case 4: {
if(fabs(data1)<1e-6
||fabs(data2)<1e-6
||fabs(data3)<1e-6
||fabs(data4)<1e-6) {
mrcPixelDataSet(dst, x, y, z, 0.0, mrcPixelRePart);
} else {
mrcPixelDataSet(dst, x, y, z, data, mrcPixelRePart);
}
break;
}
case 8: {
if(fabs(data1)<1e-6
||fabs(data2)<1e-6
||fabs(data3)<1e-6
||fabs(data4)<1e-6
||fabs(data5)<1e-6
||fabs(data6)<1e-6
||fabs(data7)<1e-6
||fabs(data8)<1e-6) {
mrcPixelDataSet(dst, x, y, z, 0.0, mrcPixelRePart);
} else {
mrcPixelDataSet(dst, x, y, z, data, mrcPixelRePart);
}
break;
}
}
}
}
}
}
}

Re: 【API関連】lmrcImageTrimingのtimesについて (2014-05-27 02:44 by tacyas #73174)

これはたぶんバグですね。もう少し確認して、修正をかけます。

[メッセージ #73162 への返信]
> 【疑問点】
> lmrcImageTrimingのtimesの用途が分かりませんでした。timesは繰り返し回数を指していると推測していますが、現在のコードではtimes回数のfor文内で入力ファイルsrcから周辺が0(付近)でないデータのみを出力ファイルdstにしていますが、srcは読み込み、dstは書き出しのみに使用されていますので、繰り返してもデータに変化がないと思います。
>
> 【ファイル名】
> src/Objects/DataManip/mrcImage/src/lmrcImageTriming.c
>
> 【該当箇所】25行目以降
>
> for(i=0; i<times; i++) {
> for(x=0; x<src->HeaderN.x; x++) {
> for(y=0; y<src->HeaderN.y; y++) {
> for(z=0; z<src->HeaderN.z; z++) {
> mrcPixelDataGet(src, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
> if(fabs(data-1.0)<1e-6) { /* On Object */
> switch(neighbor) {
> case 8:
> mrcPixelDataGet(src, x-1, y-1, z, &data5, mrcPixelRePart, mrcPixelHowNearest);
> mrcPixelDataGet(src, x+1, y-1, z, &data6, mrcPixelRePart, mrcPixelHowNearest);
> mrcPixelDataGet(src, x-1, y+1, z, &data7, mrcPixelRePart, mrcPixelHowNearest);
> mrcPixelDataGet(src, x+1, y+1, z, &data8, mrcPixelRePart, mrcPixelHowNearest);
> case 4:
> mrcPixelDataGet(src, x-1, y, z, &data1, mrcPixelRePart, mrcPixelHowNearest);
> mrcPixelDataGet(src, x+1, y, z, &data2, mrcPixelRePart, mrcPixelHowNearest);
> mrcPixelDataGet(src, x, y-1, z, &data3, mrcPixelRePart, mrcPixelHowNearest);
> mrcPixelDataGet(src, x, y+1, z, &data4, mrcPixelRePart, mrcPixelHowNearest);
> break;
> default:
> fprintf(stderr, "Not supported Neighbor: %d\n", neighbor);
> return;
> }
> switch(neighbor) {
> case 4: {
> if(fabs(data1)<1e-6
> ||fabs(data2)<1e-6
> ||fabs(data3)<1e-6
> ||fabs(data4)<1e-6) {
> mrcPixelDataSet(dst, x, y, z, 0.0, mrcPixelRePart);
> } else {
> mrcPixelDataSet(dst, x, y, z, data, mrcPixelRePart);
> }
> break;
> }
> case 8: {
> if(fabs(data1)<1e-6
> ||fabs(data2)<1e-6
> ||fabs(data3)<1e-6
> ||fabs(data4)<1e-6
> ||fabs(data5)<1e-6
> ||fabs(data6)<1e-6
> ||fabs(data7)<1e-6
> ||fabs(data8)<1e-6) {
> mrcPixelDataSet(dst, x, y, z, 0.0, mrcPixelRePart);
> } else {
> mrcPixelDataSet(dst, x, y, z, data, mrcPixelRePart);
> }
> break;
> }
> }
> }
> }
> }
> }
> }