java - java中的图像中值阈值

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

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

最佳答案

  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。

关于java - java中的图像中值阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33494489/

相关文章:

python - 如何选择由 numpy 数组表示的图像中轮廓内的像素?

用于目标检测的 OpenCV 图像预处理

图像梯度角计算

c - HSV 转换与 cvCvtColor() 问题

c++ - NDK - 图像阈值

java - SOLR入门,帮助不大

java - Spring 4.0 和 ActiveMQ enableStompBrokerRelay 错误

java - 计算每个用户输入的平均值

machine-learning - 分类模型中的阈值如何确定?

java - 在不更改代码的情况下中断在 java 进程中运行的挂起线程的命令