web-dev-qa-db-ja.com

最高のJava画像処理ライブラリ/アプローチは何ですか?

JAIメディアAPIとImageMagickの両方を使用していますか?

ImageMagickにはスケーラビリティの問題がいくつかあり、JNIベースのJMagickも魅力的ではありません。 JAIは、ImageMagickと比較して、サイズ変更操作を行う際の品質結果が低くなります。

ネイティブJavaであり、高品質の結果を提供するオープンソースまたは商用の優れたツールを知っている人はいますか?

237
Daniel Honig

ImageJ があります。

世界最速の純粋なJava画像処理プログラム

別のアプリケーションのライブラリとして使用できます。アーキテクチャは素晴らしいものではありませんが、基本的な画像処理タスクを実行します。

85
Ivan

私はこの質問がかなり古いことを知っていますが、新しいソフトウェアが出てくると、人々にとって興味深いかもしれないプロジェクトへの新しいリンクを取得するのに役立ちます。

imgscalr は、使用が非常に簡単な、純粋なJavaイメージのサイズ変更(およびパディング、トリミング、回転、ブライトニング/ディミングなどの単純な操作)ライブラリです-単一のクラスは、単純なグラフィックのセットで構成されます画像を渡して結果を取得するstaticメソッドとして定義されたすべての操作。

ライブラリを使用する最も基本的な例は次のようになります。

BufferedImage thumbnail = Scalr.resize(image, 150);

そして、いくつかの品質調整などを使用して画像サムネイルを生成するより一般的な使用法は次のようになります。

import static org.imgscalr.Scalr.*;

public static BufferedImage createThumbnail(BufferedImage img) {
    // Create quickly, then smooth and brighten it.
    img = resize(img, Method.SPEED, 125, OP_ANTIALIAS, OP_BRIGHTER);

    // Let's add a little border before we return result.
    return pad(img, 4);
}

すべての画像処理操作は、未加工のJava2Dパイプライン(主要なプラットフォームではハードウェアアクセラレーション)を使用し、コード内のライブラリ競合のようなJNIを介した呼び出しの苦痛をもたらしません。

imgscalrは、大規模なプロダクションでもかなりの数の場所で展開されています。AsyncScalrクラスを含めると、サーバー側の画像処理に最適なドロップインになります。

最高品質のULTRA_QUALITYモードで速度と品質のトレードオフに使用できる画質には、GIMPのLancoz3実装よりも見栄えの良いスケーリングされた結果を提供する多数の微調整があります。

129
Riyad Kalla

別の優れた代替手段: Marvin

30
Joseph

私はJavaの男ではありませんが、OpenCVは私のニーズに最適です。自分に合うかどうかわかりません。ここにJavaポートがあります。 http://docs.opencv.org/2.4/doc/tutorials/introduction/desktop_Java/java_dev_intro.html

9
kenny

処理 は新しいですが、非常に優れています。

8
fmsf

Catalano Framework を使用してみてください。

キーポイント:

  • AForge.NET/Accord.NETのようなアーキテクチャ。
  • デスクトップとAndroidの同じコードを使用して、両方の環境で実行します。
  • 複数のフィルターが並行して含まれています。
  • 開発はフルSteamで行われています。

Catalano Frameworkは、JavaおよびAndroid向けの科学計算のためのフレームワークです。このプロジェクトは、AForge.NETおよびAccord.NETの.NET用フレームワークの多くの機能の最初の移植として開始されましたが、これらのプロジェクト間で共有されるより高度な機能とともに着実に成長しています。

例:

FastBitmap fb = new FastBitmap(bitmap);

Grayscale g = new Grayscale();
g.applyInPlace(fb);

Threshold t = new Threshold(120);
t.applyInPlace(fb);

bitmap = fb.toBitmap();

//Show the result
5
Diego Catalano

imoの最良のアプローチは、 GraphicsMagick Image Processing System with im4Java をJavaのコマンドラインインターフェイスとして使用することです。

GraphicsMagickには多くの利点がありますが、すべての利点があります。

  • GMは、世界最大の写真サイト(FlickrやEtsyなど)で数十億のファイルを処理するために使用されます。
4
kajo

http://im4Java.sourceforge.net/ -Linuxを実行している場合、新しいプロセスをフォークするのに費用はかかりません。

3
Amanjit Gill

RoboRealmビジョンソフトウェア リスト 言及 JHLabs および NeatVision 他の多くの非Javaベースのライブラリの中で。

2
rics

商用ツールの場合は、Snowboundを試してください。

http://www.snowbound.com/

私の経験は多少古くなっていますが、Java Imaging APIはJAIよりもずっと使いやすく、はるかに高速であることがわかりました。

彼らの顧客サポートとコードサンプルも非常に良かった。

2
Clayton

「最高の」ライブラリとは言えませんが、これを試すことができると思います: http://algart.net/Java/AlgART/ これはオープンソースのJavaライブラリであり、一般化をサポートしています。 2D、3D、および多次元の画像処理やその他のアルゴリズムを含む、さまざまなタイプ(1ビットから64ビットの浮動小数点)の要素を持つ「スマート」な配列および行列。配列および行列を操作します。残念ながら、現時点では十分なデモとサンプルで構成されていませんが、一方で、多くのJavaDocが含まれています。それは数年間商用ソフトウェア(SIMAGIS)の基盤にありましたが、現在はオープンソースです。

1
Daniel