使用Java使用极坐标进行轮廓检测

时间:2018-06-29 22:05:55

标签: java image

我需要帮助检测极坐标图像中的轮廓 我正在尝试检测图像中的轮廓,这是我要执行的步骤,首先,我使用一个名为It toGray的函数,该函数以极坐标拍摄图像并以矩阵形式返回灰度形式

public static int[][]  ToGray(File img) {
        BufferedImage im = null;
        try {
            im = ImageIO.read(img);
            array = new int[im.getWidth()][im.getHeight()];
            for(int y = 0; y < im.getWidth(); y++){
                  for(int x = 0; x < im.getHeight(); x++){
                    int p = im.getRGB(y,x);

                    int a = (p>>24)&0xff;
                    int r = (p>>16)&0xff;
                    int g = (p>>8)&0xff;
                    int b = p&0xff;


                    //calculate average
                    int avg = (r+g+b)/3;
                    array[y][x] = avg;
                    //replace RGB value with avg
                    p = (a<<24) | (avg<<16) | (avg<<8) | avg;

                    im.setRGB(y, x, avg);
                    }

然后我放置另一个称为检测的函数,该函数获取矩阵和图像,然后将图像转换为极坐标后返回图像以检测图像中的伪像

public static void detecter (int[][] t, File im) {
        int L=t.length;
        int C=t[0].length;
        int k,i,j;
        int[][] r = new int[t.length][t[0].length];
        for(k=0;k<2;k++){
            for(i=0;i<L-1;i++){


                for(j=1;j<C-2;j++){
                    if((t[i][j-1]>t[i][j] && t[i][j]<t[i][j+2])&&(t[i][j-1]>t[i][j+1] && t[i][j+1]<t[i][j+2])){
                        r[i][j]=0;
                    //  (r[i][j+6-k/2]+r[i][j]+r[i][j+1+k/2])/3;
                    //  t[i][j+1]=0;
                    }   
                    if((t[i][j-1]<t[i][j] && t[i][j]>t[i][j+2])&&(t[i][j-1]<t[i][j+1] && t[i][j+1]>t[i][j+2])){
                        r[i][j]=255;
                    }
                }
                for(j=2;j<C-2;j++){
                    if((t[i][j-2]>t[i][j] && t[i][j]<t[i][j+2])&&(t[i][j-2]>t[i][j+1] && t[i][j+1]<t[i][j+2])&& (t[i][j+2]>t[i][j-1]&& t[i][j-1]<t[i][j+2])){//&&(t[i][j2]>t[i][j]&& t[i][j]<t[i][j+2])){
                    r[i][j]=0;
                //  r[i][j-1]=0;
                    // r[i][j+1]=0;
                }
                    if((t[i][j-2]<t[i][j] && t[i][j]>t[i][j+2])&&(t[i][j-2]<t[i][j+1] && t[i][j+1]>t[i][j+2])&& (t[i][j+2]<t[i][j-1]&& t[i][j-1]>t[i][j+2])){
                    r[i][j]=255;
                    }
                }
            }
        }
        BufferedImage img = null;
        try {
            img =ImageIO.read(im);
            for(i = 0; i < img.getWidth(); i++){
                  for(j = 0; j < img.getHeight(); j++){
                        img.setRGB(i, j, r[i][j]);
                  }
            }
        ImageIO.write(img, "png", new File("C:\\Users\\RAFAE\\Desktop\\pfe\\img\\ah1aa.png"));

        }

但没有得到想要的结果:

enter image description here

我正在寻找的通缉图像就像:

enter image description here

0 个答案:

没有答案