协调轮换

时间:2014-01-15 10:14:18

标签: java coordinate imagej

我需要旋转图像(或矩阵)像素的坐标。 我的目标是为每个点计算旋转后它将定位的位置,反之亦然。 我目前正在使用此程序:

private void setRot(int i) {
    this.rot = -i / (180.0 / Math.PI);
    this.coseno = Math.cos(rot);
    this.seno = Math.sin(rot);
}

private Point ruota(int x, int y){

    int centerY=h/2;
    int centerX=w/2;


    int j = (int) (coseno * (x-centerX) - seno * (y-centerY) + centerX);
    int i = (int) (seno * (x-centerX) + coseno * (y-centerY) + centerY);

    return new Point(j,i);
}

但是,如果您应用测试,对每个像素使用该方法,结果不会围绕中心旋转。

    private void esegui() {

        for(int i=0;i<w;i++)
            for(int j=0;j<h;j++){
                Point p = ruota(i,j); //ip : origina image | ip2 destination image
                ip2.putPixel(p.x, p.y, ip.getPixel(i, j));
            }
        nu.setProcessor(ip); // destination image
        nu.repaintWindow();
    }

有人会帮助我在一个方向和另一个方向上进行适当的旋转吗?

这是我的测试类:

private int getH(){ //height of destination image
    return (int) (this.h*Math.abs(coseno) + this.w*Math.abs(seno));
}
private int getW(){
    return (int) (this.plus.getHeight()*Math.abs(seno) + this.plus.getWidth()*Math.abs(coseno));
}

public Test(){ // class test
    IJ.open();
    this.plus = IJ.getImage();
    ip = plus.getProcessor();
    this.h = this.plus.getHeight(); // height of start image
    this.w = this.plus.getWidth();
    setRot(14);                     // rotation of 14°
    dHeight = this.getH();          // dimension of the target image
    dWidth = this.getW();
    System.out.println("h "+h+" gh  " + getH());
    System.out.println("w "+w+" gw  " + getW());

    // create an image target
    this.nu = NewImage.createRGBImage("rotate", getW(), getH(), 1, NewImage.FILL_BLACK);
    ip2 = nu.getProcessor();
    esegui();
    nu.setProcessor(ip2);
    nu.show();
}

0 个答案:

没有答案