如何从imagej-斐济交界处数组重新创建边界?

时间:2019-11-17 19:44:21

标签: imagej imagej-macro

我正在检测沙堆的边界并将其存储到数组中,然后将其保存为文本文件以供以后使用。我将边界存储为文本文件的方式是使用魔杖工具,然后获取选择的属性,这将给我一个表格。然后将表转换为数组,最后将其存储为文本文件。 这样做之后,我注意到上面提到的表在边界上仅具有“结”的(X,Y)坐标,而不是边界上的每个像素。

现在,当我说以后使用时,我想用各种方法使边界平滑并重绘,但是我一直陷于如何从连接处转到完整边界的问题。以下是我尝试执行的操作,但是在输出输出后,我看到大量的ram使用。 感谢您的帮助和您的宝贵时间。

X=newArray(1,5,5,10);
Y=newArray(3,3,8,8);
c=newArray("c1","c2");
//answer should be g=(1,2,3,4,5,5,5,5,5,5,6,7,8,9,10,    --x part   
//                    3,3,3,3,3,4,5,6,7,8,8,8,8,8,8)      --y part
//f=slide(a,2,c);Array.print(f);
g=cmpltarray(X,Y);Array.print(g);

function cmpltarray(Tx,Ty){

    for (i = 0; i < Tx.length-1; i++) {
    if(Tx[i]==Tx[i+1] && Ty[i]!=Ty[i+1])
    {
        l=abs(Ty[i]-Ty[i+1])-1;tempy=newArray(l);tempx=newArray(l);
        for (j = 0; j < l; j++) {
            tempy[j]=Ty[i]+j+1;tempx[j]=Tx[i];
        }
        Tx=slide(Tx,(i+1),tempx);Ty=slide(Ty,(i+1),tempy);i=i+l;
    }
    if(Ty[i]==Ty[i+1] && Tx[i]!=Tx[i+1])
    {
        l=abs(Tx[i]-Tx[i+1])-1;tempy=newArray(l);tempx=newArray(l);
        for (j = 0; j < l; j++) {
            tempx[j]=Tx[i]+j+1;tempy[j]=Ty[i];
        }
        Tx=slide(Tx,(i+1),tempx);Ty=slide(Ty,(i+1),tempy);i=i+l;
    }
        }
        return Array.concat(Tx,Ty);
}
function slide(array,n,data){
        array=Array.concat(Array.slice(array,0,n),data,Array.slice(array,n,array.length));
        return array;
    }

0 个答案:

没有答案