タグ付けされた質問 「image-processing」

デジタル画像処理に関連するもの、つまり、デジタル画像から情報を抽出または操作するために使用される理論と技術。

24
画像処理:「コカ・コーラ缶」認識のためのアルゴリズムの改善
私が過去数年間取り組んだ最も興味深いプロジェクトの1つは、画像処理に関するプロジェクトでした。目標は、コカコーラの「缶」を認識できるシステムを開発することでした(「缶」という言葉を強調していることに注意してください。その理由はすぐにわかります)。下のサンプルを見ることができます。缶はスケールと回転で緑色の長方形で認識されます。 プロジェクトに関するいくつかの制約: 背景は非常に騒々しいかもしれません。 缶は、任意の可能性があり、スケールまたは回転(合理的な範囲内で)、あるいは配向を。 画像にある程度のぼやけがある可能性があります(輪郭が完全にまっすぐではない場合があります)。 画像にコカコーラのボトルが含まれている可能性があり、アルゴリズムは缶を検出するだけです! 画像の明るさは大きく異なる可能性があります(そのため、色の検出に「過度に」依存することはできません)。 缶は、部分的側面または途中に隠された、おそらく一部は瓶の後ろに隠れてすることができます。 画像にはまったく缶がありません。その場合、何も見つからず、そのことを伝えるメッセージを書く必要がありました。 したがって、次のようなトリッキーなものになる可能性があります(この場合、アルゴリズムが完全に失敗しました)。 私はこのプロジェクトを少し前にやっていましたが、それを行うのはとても面白かったし、適切な実装がありました。ここに私の実装に関するいくつかの詳細があります: 言語:OpenCVライブラリを使用してC ++で実行。 前処理:画像の前処理、つまり画像をより生の形式に変換してアルゴリズムに提供するために、2つの方法を使用しました。 カラードメインをRGBからHSVに変更し、「赤」の色相に基づいてフィルタリングし、特定のしきい値を超える彩度でオレンジ色のような色を避け、低い値でフィルタリングして暗い色調を避けます。最終結果は、白黒のバイナリ画像で、すべての白いピクセルがこのしきい値に一致するピクセルを表します。明らかに画像にはまだがらくたがたくさんありますが、これにより、操作する必要がある次元の数が減ります。 ノイズを減らすために、メディアンフィルタリング(すべての近傍のピクセル値の中央値を取り、この値でピクセルを置き換える)を使用したノイズフィルタリング。 キャニーエッジ検出フィルターを使用して、前の2つの手順の後にすべてのアイテムの輪郭を取得します。 アルゴリズム:このタスクで選択したアルゴリズム自体は、特徴抽出に関するこの素晴らしい本から引用され、一般化ハフ変換(通常のハフ変換とはかなり異なります)と呼ばれています。それは基本的にいくつかのことを言います: 分析方程式(ここではその場合)を知らなくても、空間内のオブジェクトを記述できます。 スケーリング係数と回転係数のすべての組み合わせについて画像を基本的にテストするため、スケーリングや回転などの画像変形に耐性があります。 アルゴリズムが「学習」する基本モデル(テンプレート)を使用します。 輪郭画像に残っている各ピクセルは、モデルから学んだことに基づいて、オブジェクトの(重力に関して)中心となる別のピクセルに投票します。 最後に、投票のヒートマップが作成されます。たとえば、ここでは、缶の輪郭のすべてのピクセルがその重心に投票するので、同じピクセルに対応する多数の投票が中央にあり、ヒートマップに次のようなピークが表示されます。 それができたら、単純なしきい値ベースのヒューリスティックが中心ピクセルの位置を提供し、そこからスケールと回転を導き出し、その周りに小さな長方形をプロットできます(最終的なスケールと回転係数は明らかに、元のテンプレート)。理論的には少なくとも... 結果:現在、このアプローチは基本的なケースでは機能しましたが、一部の領域では非常に不十分でした。 それは非常に遅いです!私はこれを十分に強調していません。一部の缶が非常に小さかったため、回転と平行移動のスケーリング係数が非常に高かったため、30枚のテスト画像の処理にはほぼ1日が必要でした。 ボトルが画像内にあると完全に失われ、何らかの理由でほとんどの場合、缶の代わりにボトルが見つかりました(おそらく、ボトルが大きく、ピクセルが多く、投票数が多かったためです)。 投票は中央付近のランダムな場所のピクセルで行われ、非常にノイズの多いヒートマップで終わったため、あいまいな画像も良くありませんでした。 平行移動と回転の不変が達成されましたが、向きは達成されませんでした。つまり、カメラの対物レンズに直接面していない缶は認識されませんでした。 上記の4つの特定の問題を解決するために、OpenCV機能のみを使用して、特定のアルゴリズムを改善するのを手伝っていただけますか? 何かを学んでくれる人もいるといいのですが、結局、質問をする人だけが学ぶべきではないと思います。:)

5
MathematicaでWaldoを見つけるにはどうすればよいですか?
これは週末に私を悩ませていました:Waldoのそれらを解決する良い方法は何ですか? [ 北米以外の「ウォーリー」 ] Mathematica(画像処理およびその他の機能)を使用したパズル? これが私がこれまで持ってきたものであり、赤以外の色のいくつかを暗くすることによって視覚的な複雑さを少し軽減する関数です: whereIsWaldo[url_] := Module[{waldo, waldo2, waldoMask}, waldo = Import[url]; waldo2 = Image[ImageData[ waldo] /. {{r_, g_, b_} /; Not[r > .7 && g < .3 && b < .3] :> {0, 0, 0}, {r_, g_, b_} /; (r > .7 && g < .3 && …

22
2Dアレイでのピーク検出
犬の足の下の圧力を測定する獣医クリニックを支援しています。データ分析にPythonを使用していますが、足を(解剖学的)サブ領域に分割しようとしています。 各足の2Dアレイを作成しました。これは、時間の経過とともに足によって読み込まれた各センサーの最大値で構成されます。Excelを使用して「検出」したい領域を描画する1つの足の例を次に示します。これらは、センサーの周囲にある2 x 2のボックスで、極大値を持ち、合計が最大になります。 だから私はいくつかの実験を試みて、単純に各列と行の最大値を探すことに決めました(足の形状のために一方向に見ることはできません)。これは、別々の足指の位置をかなり「検出」するようですが、隣接するセンサーにもマークを付けます。 それで、これらの最大値のうちのどれが私が欲しいものであるかをPythonに伝える最良の方法は何でしょうか? 注:2x2の正方形はつま先を分離する必要があるため、重ねることはできません。 また、便宜上2x2を採用しましたが、より高度なソリューションも歓迎しますが、私は人間の運動科学者なので、本物のプログラマでも数学者でもないので、「シンプル」にしてください。 ここだとロードすることができますバージョンは、np.loadtxt 結果 そこで、@ jexteeの解決策を試しました(以下の結果を参照)。ご覧のとおり、前足には非常に効果的ですが、後脚にはあまり効果がありません。 具体的には、4番目のつま先である小さなピークを認識できません。これは明らかに、ループがどこにあるかを考慮せずに、ループがトップダウンで最低値に向かっているという事実に固有です。 @jexteeのアルゴリズムを調整して、4番目の足指も見つけることができるようにする方法を知っている人はいますか? 他のトライアルはまだ処理していないため、他のサンプルを提供することはできません。しかし、私が以前に提供したデータは、各足の平均でした。このファイルは、プレートと接触した順番で9足の最大データを含む配列です。 この画像は、それらがプレート上で空間的に広がっていることを示しています。 更新: 私が興味のある人のためのブログを設定していると私はすべての生の測定値とのセットアップのSkyDriveを持っています。つまり、より多くのデータを要求する人にとっては、より強力なものになります! 新しいアップデート: 足の検出と足の並べ替えに関する質問に協力していただいた結果、すべての足の足指の検出を確認することができました。結局のところ、私自身の例のような足のサイズの足以外では、うまく機能しません。後から考えてみると、2x2を恣意的に選択するのは私自身の責任です。 これがうまくいかない良い例です:爪がつま先として認識され、「かかと」が非常に幅広で、2回認識されます! 足が大きすぎるため、オーバーラップのない2x2サイズを使用すると、一部の足指が2回検出されます。逆に言えば、小型犬では5番目のつま先が見つからないことがよくあります。これは、2x2の領域が大きすぎるために発生していると考えられます。 私のすべての測定で現在の解決策を試した後、ほとんどすべての小型犬では5番目のつま先が見つからず、大型犬への影響の50%以上でさらに多くの発見があるという驚異的な結論に達しました。 だから私は明らかにそれを変更する必要があります。私の推測ではneighborhood、小型犬の場合はサイズを小さくし、大型犬の場合はサイズを大きくしています。しかしgenerate_binary_structure、配列のサイズを変更することはできません。 したがって、足のサイズにつま先の領域のスケールを設定するなど、つま先の位置を特定するためのより良い提案が他にあることを願っていますか?

10
クリスマスツリーを検出するには?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 昨年休業。 次の画像に表示されるクリスマスツリーを検出するアプリケーションを実装するために使用できる画像処理技術はどれですか。 これらすべての画像で機能するソリューションを探しています。したがって、ハールカスケード分類器またはテンプレートマッチングのトレーニングを必要とするアプローチは、それほど興味深いものではありません。 オープンソーステクノロジーのみを使用している限り、任意のプログラミング言語で記述できるものを探しています。ソリューションは、この質問で共有されている画像でテストする必要があります。あり6枚の入力画像は、その答えは、それらのそれぞれの処理結果を表示する必要があります。最後に、各出力画像には、検出されたツリーを囲むように赤い線が描画されている必要があります。 これらの画像に含まれる木をプログラムでどのように検出しますか?

10
画像を与えられた迷路を表現して解決する
画像を与えられた迷路を表現して解決する最良の方法は何ですか? (上記のように)JPEG画像が与えられた場合、それを読み取ってデータ構造に解析し、迷路を解決する最良の方法は何ですか?私の最初の本能は、ピクセル単位で画像を読み取って、ブール値のリスト(配列)に保存することです。True白いピクセルの場合と、白いピクセルFalse以外の場合(色は破棄できます)。この方法の問題は、画像が「ピクセル完璧」ではない可能性があることです。つまり、壁のどこかに白いピクセルがあると、意図しないパスが作成される可能性があるということです。 別の方法(少し考えてから来た)は、画像をSVGファイルに変換する方法です。これは、キャンバスに描かれたパスのリストです。このようにして、パスを同じ種類のリスト(ブール値)に読み込むことができます。True、パスまたは壁をFalse示し、移動可能なスペースを示します。この方法の問題は、変換が100%正確でなく、すべての壁を完全に接続していないためにギャップが生じている場合に発生します。 また、SVGへの変換の問題は、線が「完全に」まっすぐではないことです。これにより、パスは3次ベジェ曲線になります。整数でインデックスが付けられたブール値のリスト(配列)を使用すると、曲線は簡単に転送されず、曲線上に線を引くすべてのポイントを計算する必要がありますが、リストのインデックスと正確に一致しません。 これらの方法の1つは機能する可能性がありますが(おそらく機能しないかもしれません)、そのような大きな画像を考えると途方もなく非効率的であり、より良い方法が存在すると思います。これはどのようにして(最も効率的かつ/または最も単純な方法で)行われますか?最善の方法さえありますか? 次に、迷路の解決が始まります。最初の2つの方法のいずれかを使用すると、基本的にマトリックスになります。この答えによると、迷路を表す良い方法は木を使うことであり、それを解決する良い方法はA *アルゴリズムを使うことです。画像から木をどのように作成しますか?何か案は? TL; DR 解析する最良の方法?どのデータ構造に?上記の構造は解決にどのように役立ちますか? 更新 私はnumpy@Thomasが推奨するように、@ MikhailがPythonで記述したものをを使用して実装することを試みました。アルゴリズムは正しいと思いますが、期待どおりに動作していません。(以下のコード。)PNGライブラリはPyPNGです。 import png, numpy, Queue, operator, itertools def is_white(coord, image): """ Returns whether (x, y) is approx. a white pixel.""" a = True for i in xrange(3): if not a: break a = image[coord[1]][coord[0] * 3 + i] …

10
ImageMagickでJPGファイルを圧縮するための推奨事項
ImageMagickでJPG画像ファイルを圧縮したいのですが、サイズに大きな違いがありません。デフォルトでは、出力サイズは入力よりも大きくなります。理由はわかりませんが、いくつかの+ profileオプションを追加して品質を下げた後、サイズは小さくなりますが、元のサイズに似ています。 入力画像は255kb、処理画像は264kbです(+ profileを使用してプロファイルを削除し、品質を70%に設定します)。その画像を少なくとも150kbに圧縮する方法はありますか?それは可能ですか?どのImageMagickオプションを使用できますか?

11
最高のJava画像処理ライブラリ/アプローチは何ですか?[閉まっている]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 6年前休業。 この質問を改善する JAIメディアAPIとImageMagickの両方を使用していますか? ImageMagickにはいくつかのスケーラビリティの問題があり、JNIベースのJMagickも魅力的ではありません。JAIは、ImageMagickと比較して、サイズ変更操作を実行すると品質が低下します。 ネイティブJavaで高品質の結果を提供するオープンソースまたは商用の優れたツールを知っている人はいますか?



3
足の検出を改善するにはどうすればよいですか?
各足の中で足の指を見つけることについての私の前の質問の後、私はそれがどのように保持されるかを確認するために他の測定値をロードし始めました。残念ながら、私は前のステップの1つである足の認識に関する問題にすぐに遭遇しました。 ご覧のとおり、私の概念実証では基本的に各センサーの最大圧力を経時的に測定し、!= 0.0が見つかるまで各行の合計を探し始めました。次に、列に対して同じことを行い、それが再びゼロである2つを超える行を見つけるとすぐに。最小および最大の行と列の値をいくつかのインデックスに格納します。 図からわかるように、これはほとんどの場合非常にうまく機能します。ただし、このアプローチには多くの欠点があります(非常に原始的でないことを除く)。 人間は「中空の足」を持つことができます。これは、足跡自体の中にいくつかの空の行があることを意味します。これが(大型の)犬でも発生するのではないかと恐れていたので、足を切り落とす前に、少なくとも2〜3列の空の列を待っていました。 これにより、いくつかの空の行に到達する前に別の列で別の連絡先が作成されると問題が発生し、エリアが拡大します。列を比較して、それらが特定の値を超えるかどうかを確認できると思います。それらは別々の足でなければなりません。 犬が非常に小さいか、より速いペースで歩く場合、問題はさらに悪化します。後足のつま先が前足と同じ領域内で接触し始めているのに、前足のつま先がまだ接触していることが起こります! 私の簡単なスクリプトでは、これらの2つを分割することはできません。これは、その領域のどのフレームがどの足に属しているかを判別する必要があるためですが、現在はすべてのフレームの最大値のみを確認する必要があります。 うまくいかない例: だから今私は足を認識して分離するためのより良い方法を探しています(その後、私はそれがどの足であるかを決定する問題に行きます!)。 更新: 私はジョーの(素晴らしい!)答えを実装するためにいじくり回してきましたが、自分のファイルから実際の足のデータを抽出するのが困難です。 coded_pa​​wsは、最大圧力画像(上記を参照)に適用すると、さまざまな足をすべて表示します。ただし、ソリューションは各フレームを調べ(重なり合う足を分離するため)、座標や高さ/幅などの4つの長方形属性を設定します。 これらの属性を取得して、測定データに適用できる変数に格納する方法がわかりません。私は各足について知る必要があるので、どのフレームのどの位置にあるかを知り、これをどの足に結合するか(前/後ろ、左/右)。 では、Rectangles属性を使用して、各足のこれらの値を抽出するにはどうすればよいですか? 質問の設定で使用した測定値をパブリックDropboxフォルダー(例1、例2、例3)に持っています。興味がある人のために、私はあなたを最新に保つためにブログもセットアップしました :-)

7
画像の類似性を比較するためのシンプルで高速な方法
2つの画像の類似性を比較する簡単で高速な方法が必要です。つまり、まったく同じものが含まれていても、背景がわずかに異なり、数ピクセルずつ移動/サイズ変更されている可能性がある場合は、高い値を取得します。 (それが重要な場合、より具体的には:1つの画像がアイコンであり、他の画像がスクリーンショットのサブエリアであり、そのサブエリアが正確にアイコンであるかどうか知りたい。) 私はOpenCVを手元に持っていますが、まだ慣れていません。 これまでに考えた1つの可能性:両方の画像を10x10のセルに分割し、それらの100個のセルのそれぞれについて、カラーヒストグラムを比較します。次に、いくつかの構成されたしきい値を設定できます。取得した値がそのしきい値を超えている場合、それらは類似していると想定します。 まだ十分に機能していないので、まだ試していませんが、これで十分でしょう。画像はすでに(私の使用例では)かなり似ているので、かなり高いしきい値を使用できます。 これには他にも何十もの解決策があり、多かれ少なかれ機能すると思います(本当に非常に類似している場合にのみ類似性を検出したいので、タスク自体は非常に単純なので)。何を提案しますか? 画像から署名/指紋/ハッシュを取得することに関して、非常に関連する/類似した質問がいくつかあります。 OpenCV / SURF記述子から画像ハッシュ/フィンガープリント/署名を生成する方法は? 多くの画像の類似性を比較するための画像指紋 ほぼ重複する画像の検出 OpenCV:指紋画像とデータベースとの比較。 もっと、もっと、もっと、もっと、もっと、もっと、もっと また、フィンガープリントを取得するための機能を備えたこれらの実装に遭遇しました。 pHash imgSeek(GitHub repo)(GPL)は紙の高速マルチ解像度画像クエリに基づいています 画像一致。私が探していたものとよく似ています。あらゆる種類の画像の画像署名、ゴールドバーグらに基づくpHashに似ています。PythonとElasticsearchを使用します。 iqdb ImageHash。pHashをサポートします。 イメージ重複排除機能(imagededup)。CNN、PHash、DHash、WHash、AHashをサポートします。 知覚的画像ハッシュに関するいくつかの議論:ここ 少し問題:オーディオ指紋を作成する方法はたくさんあります。MusicBrainzは、曲の指紋ベースの検索を提供するWebサービスであり、wikiに概要があります。現在、AcoustIDを使用しています。これは、正確な(またはほぼ完全な)一致を見つけるためのものです。同様の一致を見つけるには(または一部のスニペットまたはノイズが多い場合)、Echoprintを参照してください。関連するSOの質問はこちらです。したがって、これはオーディオについては解決されているようです。これらのソリューションはすべて非常に優れています。 ファジー検索全般についてのもう少し一般的な質問はこちらです。たとえば、局所性に敏感なハッシュと最近傍探索があります。

16
UIImage:サイズ変更、次に切り抜き
私は文字通り何日もこの顔に顔をぶつけてきました。啓示の瀬戸際にいるといつも感じていますが、目標を達成することはできません。 私のデザインの概念的な段階の前に、iPhoneのカメラまたはライブラリから画像を取得し、アスペクトフィルオプションと同等の関数を使用して、指定した高さに縮小することは簡単なことだと思いました。(完全にコード内)UIImageView、その後、オフトリミング渡さCGRectに収まらなかったものを。 カメラまたはライブラリから元の画像を取得することは簡単でした。他の2つのステップがどれほど難しいかがわかったので、私はショックを受けました。 添付画像は私が達成しようとしていることを示しています。誰かが私の手を握るのに十分親切にしてくれませんか?これまでに見つけたすべてのコード例は、画像を壊したり、上下を逆にしたり、がらくたのように見えたり、範囲外に描画したり、そうでない場合は正しく機能しないようです。

19
Android SDKの高速ビットマップブラー
現在開発中のAndroidアプリケーションでは、画像のピクセルをループしてぼかしています。これは、640x480の画像で約30秒かかります。 Androidマーケットでアプリを閲覧しているときに、ぼかし機能を備えたアプリを見つけました。ぼかしは非常に高速(5秒など)であるため、別のぼかし方法を使用している必要があります。 誰かがピクセルをループする以外のより速い方法を知っていますか?

22
2つの画像の違いをどのように定量化できますか?
これが私がやりたいことです: ウェブカメラで定期的に写真を撮っています。タイムラプスのようなものです。何が本当に、絵はかなりされ、変更されていない場合は、見える同じことを、私は最新のスナップショットを保存する必要はありません。 違いを定量化する方法はいくつかあると思いますが、経験的にしきい値を決定する必要があります。 完璧ではなくシンプルさを求めています。私はpythonを使用しています。

6
OpenCV C ++ / Obj-C:1枚の紙の検出/ Square検出
OpenCVの正方形検出の例をテストアプリケーションに正常に実装しましたが、出力がかなり乱雑なので、フィルター処理する必要があります。または、コードが間違っていますか? 私は(のようなスキュー低減のために紙の4つの隅の点に興味があること)、さらに処理... 入出力: 元の画像: クリック コード: double angle( cv::Point pt1, cv::Point pt2, cv::Point pt0 ) { double dx1 = pt1.x - pt0.x; double dy1 = pt1.y - pt0.y; double dx2 = pt2.x - pt0.x; double dy2 = pt2.y - pt0.y; return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10); …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.