Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 图像处理中的中值滤波_Java_Image Processing - Fatal编程技术网

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

编辑:我不允许使用任何直接对图像应用中值滤波的第三方库。

我正在尝试用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 ...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阵列中的方式。