我有问题。我想将图像划分为具有(45和-45)度平行对角线的块。 你能帮我跟踪我的像素矩阵吗?“
我试着为这个方法编写一些代码。我划分宽度和高度相等的矩阵。两个三角形。你知道(i,j)=(0,0)在图像矩阵的左上方,所以直到对角线是一个三角形,之后是另一个。 这是我的代码。
public static int[] getBlackNo_45Degree(int[][] pixels, int sectionNo){
int height = pixels.length;
int width = pixels[0].length;
System.out.println(width +" - " +height);
int [] blackNo_Diagonal = new int[sectionNo];
int section = (height / sectionNo )* 2;
int temp =0, index = section, blackNo = 0, arrayIn =0;
for(int count= 0 ; count<sectionNo/2 ; count++){
blackNo = 0;
for(int row = temp; row< index ; row++ ){
int rowIndex = row ;
for(int col= 0 ; col <= row ; col++){
// System.out.println("row-col :"+rowIndex +"-"+col);
int rgb = pixels[rowIndex --][col];
if(rgb == Color.BLACK.getRGB())
blackNo ++;
}
}
blackNo_Diagonal[arrayIn++]= blackNo;
temp += section;
index += section;
System.out.println(blackNo);
}
temp = 0;
index = section;
for(int count= 0 ; count<sectionNo /2 ; count++){
blackNo = 0;
for(int col= temp +1 ; col <= index ; col++){
int colIndex = col;
for(int row= (height -1) ; colIndex < width ; row--){
//System.out.println("row-col :"+row +"-"+colIndex);
int rgb = pixels[row][colIndex++];
if(rgb == Color.BLACK.getRGB())
blackNo ++;
}
}
blackNo_Diagonal[arrayIn++]= blackNo;
temp += section;
index += section;
System.out.println(blackNo);
}
return blackNo_Diagonal;
}
我写了这个,但这不是很有效。你的想法是什么? 对于第一次编译,我尝试了一个小矩阵而不是图像。这是样本矩阵和方法的输出(sectionNo == 4):
int[][] pixels ={{Color.BLACK.getRGB(),Color.BLACK.getRGB(),Color.white.getRGB(),Color.white.getRGB()},
{Color.BLACK.getRGB(),Color.white.getRGB(),Color.BLACK.getRGB(),Color.black.getRGB()},
{Color.BLACK.getRGB(),Color.BLACK.getRGB(),Color.white.getRGB(),Color.white.getRGB()},
{Color.BLACK.getRGB(),Color.white.getRGB(),Color.BLACK.getRGB(),Color.black.getRGB()}
};
输出:
row-col :0-0
row-col :1-0
row-col :0-1
3
row-col :2-0
row-col :1-1
row-col :0-2
row-col :3-0
row-col :2-1
row-col :1-2
row-col :0-3
4
row-col :3-1
row-col :2-2
row-col :1-3
row-col :3-2
row-col :2-3
2
row-col :3-3
1