我需要帮助检测极坐标图像中的轮廓 我正在尝试检测图像中的轮廓,这是我要执行的步骤,首先,我使用一个名为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"));
}
但没有得到想要的结果:
我正在寻找的通缉图像就像: