私はOpenIMAJライブラリを使用しています。これは "JPEG"と "PNG"ファイルではうまくいきますが、tiffファイルではエラーになります。ここOpenIMAJライブラリはtiffファイルを読み取れませんか?
import org.openimaj.image.ImageUtilities;
import org.openimaj.image.MBFImage;
....
File file = new File("/home/mosab/Desktop/input/tif.tif");
MBFImage input = ImageUtilities.readMBF(file);
とエラーされています:
Exception in thread "main" java.io.IOException: org.apache.sanselan.ImageReadException: Tiff: unknown compression: 7
at org.openimaj.image.ExtendedImageIO.read(ExtendedImageIO.java:189)
at org.openimaj.image.ExtendedImageIO.read(ExtendedImageIO.java:126)
at org.openimaj.image.ImageUtilities.readMBF(ImageUtilities.java:355)
at org.mosab.TestOpenIMAJ.TestKmeans.main(TestKmeans.java:49)
Caused by: org.apache.sanselan.ImageReadException: Tiff: unknown compression: 7
at org.apache.sanselan.formats.tiff.datareaders.DataReader.decompress(DataReader.java:135)
at org.apache.sanselan.formats.tiff.datareaders.DataReaderStrips.readImageData(DataReaderStrips.java:96)
at org.apache.sanselan.formats.tiff.TiffImageParser.getBufferedImage(TiffImageParser.java:505)
at org.apache.sanselan.formats.tiff.TiffDirectory.getTiffImage(TiffDirectory.java:163)
at org.apache.sanselan.formats.tiff.TiffImageParser.getBufferedImage(TiffImageParser.java:441)
at org.apache.sanselan.Sanselan.getBufferedImage(Sanselan.java:1264)
at org.apache.sanselan.Sanselan.getBufferedImage(Sanselan.java:1163)
at org.apache.sanselan.Sanselan.getBufferedImage(Sanselan.java:1136)
at org.openimaj.image.ExtendedImageIO.read(ExtendedImageIO.java:187)
... 3 more
これは、TIFFファイルは、(特にのGeoTiff)である私が使用しています:ここでは、コードです
"https://drive.google.com/file/d/0ByKaCojxzNa9MWxPTUJjZURHR1E/view?usp=sharing"
OpenIMAJライブラリがtiff形式/ GeoTiffをサポートしていないことを意味しますか?
私はOpenIMAJがtiffをサポートしていないと思いますので、そのファイルを読むために "TwelveMonkeys"ライブラリを試しました。 "TwelveMonkeys"ライブラリを単独で/単独でファイルを読むことができます。したがって、私はOpenIMAJと一緒に働くためにTwelveMonkeysライブラリをインポートしたので、TIFFファイルをサポートしていましたが、TIFFファイルでは機能しましたが、そのファイルでは機能しませんでした。(TwelveMonkeysは別のプロジェクトで単独で読むことができました)私はそれが周り26メガバイトあるので、何かがファイルのサイズに関連している可能性が検出されたエラーメッセージを追跡し、私はエラーが法に由来することに気づいたとき
Exception in thread "main" java.io.IOException: Resetting to invalid mark
at java.io.BufferedInputStream.reset(BufferedInputStream.java:448)
at org.openimaj.image.ExtendedImageIO.read(ExtendedImageIO.java:185)
at org.openimaj.image.ExtendedImageIO.read(ExtendedImageIO.java:126)
at org.openimaj.image.ImageUtilities.readMBF(ImageUtilities.java:355)
at org.mosab.TestOpenIMAJ.TestKmeans.main(TestKmeans.java:49)
後に「読み取り」:この例外が発生しました私はそれが最大のサイズを使用すると思う "org.openimaj.image.ExtendedImageIO"のクラス10mb:
public static BufferedImage read(InputStream input) throws IOException {
if (input == null) {
throw new IllegalArgumentException("input == null!");
}
final NonClosableInputStream buffer = new NonClosableInputStream(input);
buffer.mark(10 * 1024 * 1024); // 10mb I think here is the problem
BufferedImage bi;
try {
bi = readInternal(buffer);
} catch (final Exception ex) {
bi = null;
}
if (bi == null) {
buffer.reset();
try {
bi = Sanselan.getBufferedImage(buffer);
} catch (final Throwable e) {
throw new IOException(e);
}
}
return bi;
}
OpenIMAJでこの問題を解決し、そのTIFFファイルを読むにはどうすればよいですか(OpenIMAJには、機能をさらに適用するために、クラスタリング/セグメンテーションのような機能があります)?
TIFFファイルの画像データは圧縮できます。 TIFF形式はさまざまな圧縮方法をサポートしています。どうやら(エラーメッセージに従って)使用しているライブラリは、読みたいTIFFファイルで使用されている特定の圧縮方法をサポートしていません。 – Jesper
@Jesper返信いただきありがとうございます。しかし、 "TwelveMonkeys"ライブラリはすべてのtiffファイルを読み込むことができます。私はOpenIMAJに基づいて "TwelveMonkeys"ライブラリをプロジェクトにインポートしました。それらにOpenIMAJ関数を適用します。なぜなら、OpenIMAJが許可するものよりも大きいので、それはそれを扱うことができないからです。私はOpenIMAJのチームは、制限、すなわち10MBのバッファのサイズを取り除くべきだと思います。 –
TIFF圧縮7は[( "新しいスタイル")JPEG](http://www.awaresystems.be/imaging/tiff/tifftags/compression.html)です。 TwelveMonkeys ImageIOはそれらを読むことができ、JAI ImageIOもそうだと思います。 – haraldK