java中的图像中值阈值

java中的图像中值阈值,java,image-processing,threshold,Java,Image Processing,Threshold,我正在做中值阈值。概念是我将插入一个彩色图像,然后我将使用array.sort获得每个rgb值的中值。然后根据中值写入新图像。 这是代码 public class medianthreshold{ public static void main(String[] a)throws Throwable{ File f=new File("C:\\Users\\asd\\Documents\\NetBeansProjects\\JavaApplication34\\image

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

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是图像的宽度和高度

我现在面临的问题是我不知道我应该放哪一部分来确保每个代表rgb中值的R[4]、G[4]、B[4]中的每个像素值都将更改为0或0xFFFFF。输出图像应具有像素值的0和1,这也是黑白图像

  • 你说的是中位数,但你计算的是平均数。没关系,这只是做自适应全局阈值的另一种方法
  • 为了加快速度,只需使用图像的直方图即可。计算平均值或中值将更快、更简单。您还可以使用DataBuffer而不是getRGB。此外,我强烈建议使用类型为3BYTE的BGR图像,而不是类型为INT的RGB
  • 对于平均值,您有ImageJ中的源代码示例
  • 0/1、0/0xFF或0/0xFFFF仅取决于图像编码,因此在使用BuffereImage时,分别键入\u BINARY、键入\u BYTE\u GRAY或键入\u USHORT\u GRAY
  • 你说的是中位数,但你计算的是平均数。没关系,这只是做自适应全局阈值的另一种方法
  • 为了加快速度,只需使用图像的直方图即可。计算平均值或中值将更快、更简单。您还可以使用DataBuffer而不是getRGB。此外,我强烈建议使用类型为3BYTE的BGR图像,而不是类型为INT的RGB
  • 对于平均值,您有ImageJ中的源代码示例
  • 0/1、0/0xFF或0/0xFFFF仅取决于图像编码,因此在使用BuffereImage时,分别键入\u BINARY、键入\u BYTE\u GRAY或键入\u USHORT\u GRAY

  • 这完全取决于你的要求。这完全取决于你的要求。对不起,我用“平均”的概念改为“中位数”的概念。没有编写代码>。是的,正如我在1中所说的,它只是一个其他值。对不起,我正在使用“平均值”概念更改为“中位数…”和“仅概念”。没有编写代码>。是的,正如我在1中所说的,它只是另一个值。