2014-02-01 3 views
1

Я работаю над обработкой изображений для приложений Android. Мне нужно выбрать случайную подматрицу 8X8 из матрицы изображений 512x512. код, который я попробовал, как ниже подматрица пакета;Случайная подматрица

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.ArrayList; 
import java.util.List; 

public class matrix { 
    public static void main(String[] args) { 
    //float[][] a = new float[32][32]; 
    //float[][] b = new float[8][8]; 
    int[][] a = new int[32][32]; 
    int[][] c =bigmatrix(a); 
    int[][] b = new int[8][8]; 
    int[][] d = submatrix(c,b); 
    int m=a.length; 
    int n=a[0].length; 
    int p=b.length; 
    int q=b[0].length; 
    System.out.println("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
    System.out.println("M:"+m); 
    System.out.println("N:"+n); 
    System.out.println("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
    System.out.println("the marix is lik this:"); 
    for (int i = 0; i < m; i++) { 
     for (int j = 0; j < n; j++) { 
      System.out.print(c[i][j]+"\t"); 
      //System.out.println(); 
     } 
     System.out.print("\n"); 
    } 
    System.out.println("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
    System.out.println("the sub marix is lik this:"); 
    for (int i = 0; i < p; i++) { 
     for (int j = 0; j < q; j++) { 
      System.out.print(b[i][j]+"\t"); 
      //System.out.println(); 
     } 
     System.out.print("\n"); 
    } 
    } 

    private static int[][] bigmatrix(int[][] a) { 
      // TODO Auto-generated method stub 


       int[][] c = new int[32][32]; 
       for (int i = 0; i < 32; i++) { 
        for (int j = 0; j <32; j++) { 

          c[i][j]=i; 
         } 
        } 
      return c; 


    } 

    private static int[][] submatrix(int[][]c, int[][]b) 
    { 
     int m=0,n=0; 
     int N=8; 
     int count=0; 
     for (int i = 0; i < c.length ; i+=N) { 
       for (int j = 0; j < c[0].length ; j+=N) { 
        boolean submatrix = true; // at start we assume we have a submatrix 
        for (int k = i; k < i+N; k++) { 
         for (int l = j; l < j+N; l++) { 
          b[m][n]=c[k][l]; 
          print_submatrix(b); 
          count++; 
          //System.out.print(" " +b[m][n]); 
          n++; 
         }m++; //System.out.println(); 
         n=0;  
        } 
        m=0; 

        } 

       } 
     System.out.println("***Count ="+count+"***"); 

     return b; 
} 
public static void print_submatrix(int[][] b) { 
    int p=b.length; 
     int q=b[0].length; 


      //System.out.println(); 


      System.out.println("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
     System.out.println("the sub marix is lik this:"); 
      for (int i = 0; i < p; i++) { 
       for (int j = 0; j < q; j++) { 

        System.out.print(b[i][j]+"\t"); 
       } 
       System.out.print("\n"); 

//    
     } 
} 
} 

это печать подматрицы, но не правильный один , пожалуйста, дайте мне правильный код для случайного подматрицы

ответ

0

отредактированное сообщение

public class Matrix { 
public static void main(String[] args) { 
    int[][] a = new int[32][32]; 
    for (int i = 0; i < 32; i++) { 
     for (int j = 0; j <32; j++) { 
      a[i][j]=i+j; 
     } 
    } 

    System.out.println("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
    System.out.println("The matrix is like this:"); 
    for (int i = 0; i < a.length; i++) { 
     for (int j = 0; j < a[0].length; j++) { 
      System.out.print(a[i][j]+"\t"); 
     } 
     System.out.print("\n"); 
    } 

for (int i = 0; i <= 24; i++) { 
    for (int j = 0; j <= 24; j++) { 
     print_submatrix(a, i, j); 
    } 
    System.out.print("\n"); 
} 
} 

public static void print_submatrix(int[][] b, int p, int q) { 
    System.out.println("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
    System.out.println("The sub matrix [" + p + "," + q + "] is like this:"); 
    for (int i = p; i < p+8; i++) { 
     for (int j = q; j < q+8; j++) { 
      System.out.print(b[i][j]+"\t"); 
     } 
     System.out.print("\n"); 
    } 
} 
} 

Этот код записывает все возможные подматрицы 8x8 в 32x32.

Старый пост:

В этой части:

System.out.println("the sub matrix is like this:"); 
for (int i = 0; i < p; i++) { 
    for (int j = 0; j < q; j++) { 
     System.out.print(b[i][j]+"\t"); 
     //System.out.println(); 
    } 
    System.out.print("\n"); 
} 
} 

Выберите новый начальный номер для I и J, как случайное число в диапазоне от 0 до 24 лет вместо того, чтобы всегда 0.

Random generator = new Random(); 
int i = generator.nextInt(24); 

Затем используйте 8 для p и q как размер подматрицы.

Random generator = new Random(); 
int ii = generator.nextInt(24); 
int jj = generator.nextInt(24); 

System.out.println("the sub marix is lik this:"); 
for (int i = ii; i < 8; i++) { 
    for (int j = jj; j < 8; j++) { 
     System.out.print(b[i][j]+"\t"); 
     //System.out.println(); 
    } 
    System.out.print("\n"); 
} 
} 
+0

thank u, но где shud i call print_submatrix() – user3259851

+0

На самом деле этот код имеет несколько проблем с алгоритмом. Если вы точно объясните, что вы хотите сделать, я могу вам помочь. один из моих вопросов: ваша цель напечатать случайную подматрицу или все подматрицы? – karakale

+0

thank u для ответа снова У меня есть два требования Я хочу найти все возможные случайные подматрицы и распечатать их – user3259851