Java 图像处理中的中值滤波
编辑:我不允许使用任何直接对图像应用中值滤波的第三方库。 我正在尝试用Java实现中值滤波器。我使用以下逻辑Java 图像处理中的中值滤波,java,image-processing,Java,Image Processing,编辑:我不允许使用任何直接对图像应用中值滤波的第三方库。 我正在尝试用Java实现中值滤波器。我使用以下逻辑 package com.start; import java.io.File; import java.io.FileOutputStream; import java.nio.file.Files; import java.util.Arrays; public class MedianFilter { public static void main(String ...arg
package com.start;
import java.io.File;
import java.io.FileOutputStream;
import java.nio.file.Files;
import java.util.Arrays;
public class MedianFilter {
public static void main(String ...args) throws Exception{
MedianFilter md= new MedianFilter();
md.applyMedianFilter();
}
public void applyMedianFilter() throws Exception{
//input image is 256*230
File ip = new File("G:\\ct.raw");
File op = new File("G:\\ctoutput.raw");
FileOutputStream stream = null;
stream = new FileOutputStream(op);
byte[] fileContent = Files.readAllBytes(ip.toPath());
int[] resultArr = new int[fileContent.length];
for (int i = 0; i < fileContent.length; i++) {
resultArr[i] = fileContent[i] & 0xff;
}
int[][] pixels = new int[256][230];
for (int i = 0; i < 256; i++) {
for (int j = 0; j < 230; j++) {
pixels[i][j] = resultArr[(j * 230) + i];
}
}
int[] data = new int[9];
for (int i = 0; i < 256; i++) {
for (int j = 0; j < 230; j++) {
int counter = 0;
//median filter of size 3*3
for (int k = -1; k <= 1; k++) {
for (int l = -1; l <= 1; l++) {
{
data[counter] = pixels[i + k][j + l];
counter++;
}
}
}
Arrays.sort(data);
stream.write(data[4]);
}
}
stream.close();
}
}
package.com.start;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.nio.file.Files;
导入java.util.array;
公共类中介过滤器{
公共静态void main(字符串…参数)引发异常{
MedianFilter md=新的MedianFilter();
md.applyMedianFilter();
}
public void applyMedianFilter()引发异常{
//输入图像为256*230
文件ip=新文件(“G:\\ct.raw”);
File op=新文件(“G:\\ctoutput.raw”);
FileOutputStream=null;
流=新文件输出流(op);
byte[]fileContent=Files.readAllBytes(ip.toPath());
int[]resultar=newint[fileContent.length];
for(int i=0;i 对于(int k=-1;k),您应该使用resultar[(j*256)+i]
因为这是宽度,而不是假定行的主要顺序,它实际上应该是resultar[i*230+j]
,因为行索引i
需要跳过230列才能到达下一行。如果数据是列的主要顺序,那么它应该是resultar[j*256+i]
因为您需要跳过256行才能进入下一列。请提供原始数据文件,或提供有关输入数据结构的详细信息。在提供正确答案之前,这是必需的,但罪魁祸首是您将像素复制到2D数组中的方式。您应该使用resultar[(j*256)+i]
因为这是宽度,而不是行的主要顺序,它实际上应该是resultar[i*230+j]
因为行索引i
需要跳过230列才能到达下一行。如果数据是列的主要顺序,那么它应该是resultar[j*256+i]
因为您需要跳过256行才能进入下一列。请提供原始数据文件,或提供有关输入数据结构的详细信息。在提供正确答案之前,这是必需的,但罪魁祸首是您将像素复制到2D阵列中的方式。