我正在做中值阈值。这个概念是我将插入一个彩色图像,然后我将使用 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。此外,我强烈建议使用 TYPE_3BYTE_BGR 图像而不是 TYPE_INT_RGB。
- 也就是说,您在 ImageJ 中有代码源示例。
- 0/1、0/0xFF 或 0/0xFFFF 仅取决于图像编码,因此在使用 BufferedImage 时分别为 TYPE_BINARY、TYPE_BYTE_GRAY 或 TYPE_USHORT_GRAY。
关于java - java中的图像中值阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33494489/