关于我尝试读取 .FIT 文件时的异常
About an exception when i try to read a .FIT file
我有一个包含 .FIT 文件的文件夹,我有读取它们的代码:
private static void readFitFile() {
try {
List<File> filesdebuglder = Files.walk(Paths.get(LOCAL_EXPANDED_DATA_PATH))
.filter(Files::isRegularFile)
.map(Path::toFile)
.collect(Collectors.toList());
System.out.println("There are " + filesdebuglder.size() + " .FIT files in folder " + LOCAL_EXPANDED_DATA_PATH);
for (File afile : filesdebuglder) {
System.out.println("Doing something cool with file " + afile.getName() + " ...");
Fits fitsFile = new Fits(afile);
ImageHDU imageHDU = (ImageHDU) fitsFile.readHDU();
StandardImageTiler tiler = imageHDU.getTiler();
// The exception happens with getCompleteImage() method
float[][][][] tmp = (float[][][][]) tiler.getCompleteImage();
System.out.println("tmp is " + tmp);
float[][] imgData = tmp[0][0];
System.out.println("imgData is " + imgData );
}
} catch (FitsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(ClassCastException e) {
e.printStackTrace();
}
}
我得到了这个输出:
There are 409 .FIT files in folder resources/wetransfer-39ab61
Doing something cool with file RN20130622_1x1_SIN FILTRO_000102206.REDUCED.FIT ...
java.lang.ClassCastException: [[S cannot be cast to [[[[F
at com.aironman.deeplearning4j.TrainFITSImageNetVG16.readFitFile(TrainFITSImageNetVG16.java:86)
at com.aironman.deeplearning4j.TrainFITSImageNetVG16.main(TrainFITSImageNetVG16.java:68)
我正在使用最新的库依赖项,我可以使用 GIMP 打开 FIT 文件。
<dependency>
<groupId>gov.nasa.gsfc.heasarc</groupId>
<artifactId>nom-tam-fits</artifactId>
<version>${nom-tam-fits.version}</version>
</dependency>
<properties>
<nom-tam-fits.version>1.15.2</nom-tam-fits.version>
</properties>
我正在尝试读取包含 .FIT 文件的文件夹并训练使用 deeplearning4j 训练模型以识别这些文件的内容,但由于异常我无法读取任何文件。我做错了什么?
编辑。这是正确的代码:
private static void readFitFile() {
try {
List<File> filesdebuglder = Files.walk(Paths.get(LOCAL_EXPANDED_DATA_PATH))
.filter(Files::isRegularFile)
// .filter(line -> line.getName(0).toString().contains(".FIT"))
.map(Path::toFile)
.collect(Collectors.toList());
System.out.println("There are " + filesdebuglder.size() + " .FIT files in folder " + LOCAL_EXPANDED_DATA_PATH);
int count = 1;
for (File afile : filesdebuglder) {
System.out.println("Doing something cool with file " + afile.getName() + " ...");
Fits fitsFile = new Fits(afile);
ImageHDU imageHDU = (ImageHDU) fitsFile.readHDU();
StandardImageTiler tiler = imageHDU.getTiler();
short[][] tmp = (short[][] ) tiler.getCompleteImage();
System.out.println("tmp is " + tmp);
short imgData = tmp[0][0];
System.out.println("imgData is " + imgData );
count ++;
System.out.println("Done with the file " + afile.getName() + " ... " + count);
fitsFile.close();
}
} catch (FitsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(ClassCastException e) {
e.printStackTrace();
}
}
tiler.getCompleteImage()
returns 一个二维 short
数组,您尝试将其转换为一个 4 维 float
数组。
这在 java.
中是不可能的
见下文:
public static void main(String[] args) {
Object s = new short[][]{};
float[][][][] f = new float[][][][]{};
f=(float[][][][])s;
}
java.lang.ClassCastException: [[S 无法转换为 [[[[F
我有一个包含 .FIT 文件的文件夹,我有读取它们的代码:
private static void readFitFile() {
try {
List<File> filesdebuglder = Files.walk(Paths.get(LOCAL_EXPANDED_DATA_PATH))
.filter(Files::isRegularFile)
.map(Path::toFile)
.collect(Collectors.toList());
System.out.println("There are " + filesdebuglder.size() + " .FIT files in folder " + LOCAL_EXPANDED_DATA_PATH);
for (File afile : filesdebuglder) {
System.out.println("Doing something cool with file " + afile.getName() + " ...");
Fits fitsFile = new Fits(afile);
ImageHDU imageHDU = (ImageHDU) fitsFile.readHDU();
StandardImageTiler tiler = imageHDU.getTiler();
// The exception happens with getCompleteImage() method
float[][][][] tmp = (float[][][][]) tiler.getCompleteImage();
System.out.println("tmp is " + tmp);
float[][] imgData = tmp[0][0];
System.out.println("imgData is " + imgData );
}
} catch (FitsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(ClassCastException e) {
e.printStackTrace();
}
}
我得到了这个输出:
There are 409 .FIT files in folder resources/wetransfer-39ab61
Doing something cool with file RN20130622_1x1_SIN FILTRO_000102206.REDUCED.FIT ...
java.lang.ClassCastException: [[S cannot be cast to [[[[F
at com.aironman.deeplearning4j.TrainFITSImageNetVG16.readFitFile(TrainFITSImageNetVG16.java:86)
at com.aironman.deeplearning4j.TrainFITSImageNetVG16.main(TrainFITSImageNetVG16.java:68)
我正在使用最新的库依赖项,我可以使用 GIMP 打开 FIT 文件。
<dependency>
<groupId>gov.nasa.gsfc.heasarc</groupId>
<artifactId>nom-tam-fits</artifactId>
<version>${nom-tam-fits.version}</version>
</dependency>
<properties>
<nom-tam-fits.version>1.15.2</nom-tam-fits.version>
</properties>
我正在尝试读取包含 .FIT 文件的文件夹并训练使用 deeplearning4j 训练模型以识别这些文件的内容,但由于异常我无法读取任何文件。我做错了什么?
编辑。这是正确的代码:
private static void readFitFile() {
try {
List<File> filesdebuglder = Files.walk(Paths.get(LOCAL_EXPANDED_DATA_PATH))
.filter(Files::isRegularFile)
// .filter(line -> line.getName(0).toString().contains(".FIT"))
.map(Path::toFile)
.collect(Collectors.toList());
System.out.println("There are " + filesdebuglder.size() + " .FIT files in folder " + LOCAL_EXPANDED_DATA_PATH);
int count = 1;
for (File afile : filesdebuglder) {
System.out.println("Doing something cool with file " + afile.getName() + " ...");
Fits fitsFile = new Fits(afile);
ImageHDU imageHDU = (ImageHDU) fitsFile.readHDU();
StandardImageTiler tiler = imageHDU.getTiler();
short[][] tmp = (short[][] ) tiler.getCompleteImage();
System.out.println("tmp is " + tmp);
short imgData = tmp[0][0];
System.out.println("imgData is " + imgData );
count ++;
System.out.println("Done with the file " + afile.getName() + " ... " + count);
fitsFile.close();
}
} catch (FitsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(ClassCastException e) {
e.printStackTrace();
}
}
tiler.getCompleteImage()
returns 一个二维 short
数组,您尝试将其转换为一个 4 维 float
数组。
这在 java.
见下文:
public static void main(String[] args) {
Object s = new short[][]{};
float[][][][] f = new float[][][][]{};
f=(float[][][][])s;
}
java.lang.ClassCastException: [[S 无法转换为 [[[[F