質問

コンピューターイメージングの核心となる作業を行いたいと思います。データの単一ピクセルを読み取り、プログラムで分析し、変更する方法を探しています。これに使用するのに最適な言語は何ですか(Python、c ++、Java ...)?最高のファイル形式は何ですか?

超豪華なソフトウェア/ APIは必要ありません...最低限の基本を探しています。

役に立ちましたか?

解決

速度が必要な場合(おそらく画像処理で常に速度が必要になるでしょう)、生のピクセルデータを操作する必要があります。 Javaにはメモリに直接アクセスできないため、メモリに直接アクセスする場合に比べてピクセルアクセスが非常に遅くなるため、いくつかの実際の欠点があります。 C ++は、間違いなく本番用の画像処理に最適な言語です。ただし、たとえば、特定の領域で安全でないコードを許可するC#を使用することもできます。 (bitmapdataクラスのscan0ポインタープロパティを見てください。) 私はC#を画像処理アプリケーションにうまく使用しましたが、Javaのものよりも明らかに高速です。 そのような目的でスクリプト言語やJavaを使用することはありません。

他のヒント

Python などの高レベル言語を使用して、写真であるピクセル情報の大きな多次元または複雑な配列を操作することは非常に簡単です。 PIL(Python Imaging Library )というライブラリがあり、これは非常に便利であり、生のピクセルデータを操作するだけでなく、一般的なフィルターと変換(明るさの変更、ソフト化、彩度低下、トリミングなど)を実行します。

これは最も簡単で最も簡単な画像ライブラリですかつては興味があり、何でもできるように拡張できます(たとえば、ごくわずかなコードでのエッジ検出)。

C / C ++が高速になるだけでなく、そこにある画像処理のサンプルコードのほとんどはCにもあるので、見つけたものを簡単に組み込むことができます。

画像の数値処理を検討している場合(マトリックスと考えてください)、Pythonを使用している場合は、 http:/を確認してください。 /www.scipy.org/PyLab -これは基本的に、Pythonでmatlabを実行する機能です。

(これは、基本的なことだけを望んでいたOPには当てはまらないかもしれませんが、速度の問題が持ち上がったので、記録のためだけにこれを書く必要があります。)

本当に 速度が必要な場合は、ピクセル単位で作業することを忘れて、実行する必要がある操作がベクトル化。たとえば、C / C ++コードには、優れた Intel IPPライブラリ(いいえ、Intelで働いていません)。

やろうとしていることに少し依存します。

実行速度が問題の場合は、c ++が最適な方法です。

ただし、開発速度が問題になる場合は、Javaを検討することをお勧めします。あなたはピクセルの低レベルの操作が必要だと言ったが、これはjavaがあなたのためにする。しかし、問題になる可能性のある他のことは、さまざまなファイル形式の処理です。 Javaには、ファイル(特にjava2dライブラリ。より高いレベルのAPIを無視することを選択します)へのさまざまな画像形式の読み取りおよび書き込みを処理する非常に優れたAPIがあります。

c ++オプションを選択した場合(またはpythonが考えた場合)、ファイルの読み取りおよび書き込みの起動時の問題を解決するために、ライブラリを使用することを再度お勧めします。以前に libgd

で成功しました。

どの言語を一番よく知っていますか?私にとって、これは本当の質問です。 特定の言語の学習に数か月も費やそうとしている場合、Python(またはJava)を(証明される)開発速度のためだけに使用することには実質的な利点はありません。 私は特にC ++に精通しており、この特定のタスクについては、たとえばJavaプログラマーと同じくらい迅速にできると思います。優れたライブラリ(OpenCVが思い浮かぶ)の助けを借りて、実際には数行のC ++コードで必要なものを作成できます。

簡単な答え:C ++およびOpenCV

人工知能とコンピュータービジョンを研究したため、この分野で使用されているツールの種類をよく知っています。

基本:舞台裏でどのように機能するかを知っていれば、好きなものを使用できます。

達成したい内容に応じて、次のいずれかを使用できます。

  • C言語ですが、アルゴリズムを実装する際のバグチェックとメモリ管理に多くの時間を失います。理論的には、これはその種の仕事をするための最速の言語ですが、アルゴリズムが(複雑さの点で)計算効率が良くない場合、またはバグチェックで多くの時間を失っている場合、これは明らかに価値がありません。したがって、最初にアプリケーションを別の言語で実装し、その後、Cバインディングを使用してコードの小さな部分をいつでも最適化することをお勧めします。
  • Octave / MatLab:Cとほぼ同じくらい非常に効率的な言語であり、非常にエレガントで簡潔なアルゴリズムを作成できます。ベクトル化、行列演算、線形演算を使用している場合は、それを使用する必要があります。ただし、この言語を使用してアプリケーション全体を開発することはできず、アルゴリズムに重点を置いていますが、後で別の言語を使用していつでもインターフェイスを開発できます。
  • Python:GoogleやFacebookなどの巨大な大規模アプリケーションで使用される、オールインワンのエレガントでアクセス可能な言語。 Python、あらゆる種類のアプリケーションで、必要なことはほぼすべて実行できます。完全なアプリケーションを作成する場合(アルゴリズムだけでなく、クライアントとの対話およびすべてを使用する場合)、またはPythonには次のような非常に多くの高品質ライブラリが含まれているため、既存のライブラリを使用してプロトタイプをすばやくドラフトする場合に最適です OpenCV 。ただし、アルゴリズムのみを作成する場合は、Octave / MatLabを使用することをお勧めします。

解決策として選択された答えは非常に偏っているため、この種の古風なコメントには注意する必要があります。

最近では、ハードウェアはウェットウェア(人間)よりも安価であるため、CPUサイクルやメモリスペースが多少犠牲になったとしても、結果をより速く生成できる言語を使用する必要があります。

また、多くの人は、C / C ++でソフトウェアを実装している限り、あなたはスピードの聖者グラールを作っていると考える傾向があります。これは事実ではありません。第一に、アルゴリズムの複雑さは使用している言語よりもはるかに重要であるため(悪いアルゴリズムは、宇宙で最も遅い言語で実装されていても、より良いアルゴリズムに勝るものではありません)、第二に、高レベル言語が最近多くのことをしているためですキャッシュと速度の最適化を実現します。これにより、プログラムをC / C ++よりもさらに高速に実行できます。

もちろん、上記のすべてをC / C ++でいつでも行うことができますが、車輪を再発明するために時間をどれだけ費やすつもりですか?

簡単な回答ですか? C ++と言えば、PythonやJavaよりもはるかに柔軟に生のメモリチャンクを操作できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top