2015-11-03 115 views
1

我在做中位数阈值。这个概念是我将插入一个彩色图像,然后我将使用array.sort来获取每个rgb值的中值。然后根据中值写入新图像。 这是代码。java中的图像中值阈值

public class medianthreshold{ 
    public static void main(String[] a)throws Throwable{ 
     File f=new File("C:\\Users\\asd\\Documents\\NetBeansProjects\\JavaApplication34\\images.jpg");        //Input Photo File 
     Color[] pixel=new Color[9]; 
     int[] R=new int[9]; 
     int[] B=new int[9]; 
     int[] G=new int[9]; 

     File output=new File("C:\\Users\\asd\\Documents\\NetBeansProjects\\JavaApplication34\\outputmedian.jpg"); 


       img.setRGB(i,j,new Color(R[4],B[4],G[4]).getRGB()); 
      } 
     ImageIO.write(img,"jpg",output); 
    } 
} 

,我想以增强它,使它成为黑白图像,通过把一个状态,如果每个RGB的像素值小于中值,则该值应为0(表示白色),否则该值变为0xFFFFFF(代表黑色)。 225x225是图像的宽度和高度。

我现在面临的问题是我duno哪一部分,我应该确保每个R [4],G [4],B [4]中的每个像素值都将变为0或0xFFFFF,这些值代表中值的rgb。输出图像应该有0和1的像素值,这也是一个白色和黑色的图像。

+0

这完全取决于您的要求。 –

回答

0
  1. 你说的中位数,但你计算了平均值。没关系,这只是其他方法来做一个自适应的全局阈值。
  2. 为了使其更快,您应该简单地使用图像的直方图。计算平均值或中值会更快更简单。您也可以使用DataBuffer而不是getRGB。此外,我强烈建议使用TYPE_3BYTE_BGR图像而不是TYPE_INT_RGB。
  3. 意思是说,你在ImageJ中有代码源例子。
  4. 0/1,0/0xFF或0/0xFFFF仅取决于图像编码,所以当您使用BufferedImage时分别为TYPE_BINARY,TYPE_BYTE_GRAY或TYPE_USHORT_GRAY。
+0

对不起,我正在使用平均值的概念来改变中位数......只是概念。没有写代码>。< – kenreal

+0

是的,正如我在1中所说的那样,它只是一个其他值。 – FiReTiTi