java

时间:2015-11-03 08:31:09

标签: 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\\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是图像的宽度和高度。

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

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。