2014-01-31 20 views
0

我已經找到了差異像素。我需要將這些差異像素值分組到區域中。應該隨機選擇一個種子像素。現在該區域必須生長爲8個連通區域。在這裏我附上了我到現在爲止所實施的代碼。所以請建議我執行上述操作。 如何從給定的一組差異像素值形成圖像?

import java.io.IOException; 
import javax.imageio.ImageIO; 
import java.io.File; 
import java.awt.image.BufferedImage; 
import java.io.BufferedWriter; 
import java.io.FileWriter; 
import java.util.Scanner; 
import java.awt.Image; 
import javax.swing.*; 
import java.awt.*; 

import java.awt.image.BufferedImage; 
public class imageMSE 
{ 
    public static String img; 
    public static int no; 
    public static BufferedImage[] image; 
    public static BufferedImage[] res; 

    public static void getImage() 
    { 
     Scanner in=new Scanner(System.in); 
     System.out.println("\nPLEASE ENTER THE TOTAL NUMBER OF IMAGES:"); 
     no=in.nextInt(); 
     System.out.println("\nTHE NUMBER OF IMAGES ARE: "+no); 
    image=new BufferedImage[no]; 
     for(int i=0;i<no;i++) 
     { 
      image[i]=null; 
     } 
     try 
     { 
      Scanner in1=new Scanner(System.in); 
      System.out.println("\nPLEASE ENTER THE PATH FOR IMAGES:"); 
      for(int i=0;i<no;i++) 
      { 
       System.out.println("\nPLEASE ENTER THE PATH FOR IMAGE["+(i+1)+"] :"); 
       img=in1.nextLine(); 
       image[i] = ImageIO.read(new File(img)); 
      } 
     } 
     catch (IOException e) 
     { 
       e.printStackTrace(); 
      }   

} 

    public static void getPixelValue() 
    { 
     int width=image[0].getWidth(null); 
     int height=image[0].getHeight(null); 
     int[][][] color=new int[no][width][height]; 
     int scount=0; 
     int dcount=0; 
     int err=0; 
     int sqr=0; 
     int sum=0; 
     double simper; 
    res=new BufferedImage[no]; 
    for(int i=0;i<no;i++) 
    { 
     res[i]=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); 
    } 
     int [][]com1=new int[width][height]; 
     int [][]com2=new int[width][height]; 
     for(int ino=1;ino<no;ino++) 
     { 
      for(int i=0;i<width;i++) 
      { 
       for(int j=0;j<height;j++) 
       { 
        com1[i][j]=image[0].getRGB(i,j); 
        com2[i][j]=image[ino].getRGB(i,j); 
        if(com1[i][j]==com2[i][j]) 
        { 
         scount++; 
        } 
        else 
        { 
         sqr=0; 
         dcount++; 
         err=com1[i][j]-com2[i][j]; 
         sqr=err*err; 
         res[ino].setRGB(i,j,com2[i][j]); 
          sum+=sqr; 
        // if(err>500000) 
         // System.out.println("the error value is : "+err); 
        }   
       }  
      } 
      float mul=width*height; 
      System.out.println("the no of pixel similar for "+ino+ "th image is "+scount); 
      System.out.println("the no of pixel gets varied for "+ino+ "th image is "+dcount); 
      System.out.println("Mean Square error is : "+sum); 
      simper=(100*scount)/mul; 
      System.out.println("the percentage of similarity for the 1th image and "+(ino+1)+ "th image is "+simper); 
      sum=0; 
      dcount=0; 
      scount=0; 
     } 



} 
    public static void main(String[] args) 
    { 
     getImage(); 
     getPixelValue(); 
     JFrame frame = new JFrame(); 
    JLabel[] label=new JLabel[no]; 
    JLabel resl[]=new JLabel[no]; 
    JPanel picPanel=new JPanel(); 
    picPanel.setLayout(new GridLayout(5,5,2,2)); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(1000, 1000); 
    for(int i=0;i<no;i++) 
    { 
      label[i] =new JLabel(new ImageIcon(image[i])); 
     label[i].setSize(100,100); 
     picPanel.add(label[i]); 
    } 
     for(int i=1;i<no;i++) 
    { 
    resl[i]=new JLabel(new ImageIcon(res[i])); 
    picPanel.add(resl[i]); 
    } 
    frame.add(picPanel); 
    frame.setVisible(true); 
    } 
} 

回答

0

創建規模的新形象,你想

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 

然後訪問單個像素的「畫」

image.setRGB(x, y, rgb); 

你最新的代碼是接近的,但有一些問題...

您不需要任何「圖形」代碼。刪除此

Graphics g=res.getGraphics(); 
在你的JFrame

g.drawImage(res,0,0,null); 

要添加2個板。只需使用一個。

刪除

JPanel result=new JPanel(); 

和刪除

result.add(resl); 
frame.add(result); 

只是新的圖像添加到現有的面板

picPanel.add(resl) 
+0

什麼叫畫是什麼意思?我已經修改我的代碼進入低於一個。 – 1210dhana

+0

BufferedImage res;在計算出錯誤值後,在else部分中的getPixelValue函數中,我添加了res.setRGB(i,j,err)。但圖像不顯示。 – 1210dhana

+0

您仍然需要將新圖像添加到JPanel中,就像您使用其他圖像一樣。請編輯你的問題,以便它有你最新的代碼。 –