画像内の定義済みゾーンを抽出するみなさん、
スクリプトを使って自分のイメージの定義済みの円の中にあるピクセルを抽出することが可能かどうかを知りたいです(添付参照)。
ご協力ありがとうございます。
Krs、
サミル
再:画像内の事前定義されたゾーンを抽出する多分。画像に含まれるピクセル値に関する統計を使ってモデルを作成し、フィルタに必要な2つのしきい値を作成することができます。スムーズなピクセルでモデルを構築できるように、(cannyフィルターの内側ではなく)cannyフィルターの前に画像を滑らかにすることをお勧めします。(編集:内部のキャニーフィルターのぼかしは、浮動小数点データを追跡するのでより優れています。外部ぼかしは、浮動小数点データをぼかした画像の整数のピクセル値0..255に減らし、暗い画像のほとんどのピクセルは0..10程度になります。)
https://en.wikipedia.org/wiki/Canny_edge_detector キャニーフィルターの機能を説明します。大きなしきい値(写真にとっては非常に小さい値)は、線が始まる場所です。2つの隣接するピクセルはその分異なっていなければなりません。この線は、小さいしきい値(写真にとって非常に小さい)を下回るまで「追従」します。 「2つのしきい値は経験的に決定され、その定義は与えられた入力画像の内容に依存します。」 - Wikipedia
これらの画像で色は重要ですか?そうでない場合は、画像をグレースケールに縮小します。もっと簡単な問題になるでしょう、と私は思います。あなたはグレースケール値の分布を作ることができます...
あなたがそれをイメージに入れたあと、あなたはラインで何をしますか?それは単なるビジュアライゼーションなのでしょうか、それともその画像に対してもっと計算をするのでしょうか。あなたが重心と半径を必要とするならば、クラスタリングアプローチはまだうまくいくかもしれません。
再:画像内の事前定義されたゾーンを抽出する親愛なるCraige、
このソリューションは自動化された方法で展開されましたが、写真は異種のため、しきい値パラメータを手動で調整する必要があります。このステップを自動化することは可能だと思いますか?
どうもありがとう、
サミル
再:画像内の事前定義されたゾーンを抽出する親愛なるCraige、
キャニーフィルターは本当に役に立ちます。
プロセスを自動化します。
クラスタリングも非常に興味深いですが、結果は他の写真ではあまり明確ではありません。
ご協力ありがとうございました
サミル
再:画像内の事前定義されたゾーンを抽出するスクリプトインデックスのキャニーフィルタの例を見てください。パラメータはスライダー上にあり、データの強度が異なる場合は非常に扱いにくいかもしれません。
スクリプティングインデックスのスライダ設定の例
これを取得する
キャニーフィルターがエッジを検出
画像内のノイズは、一番上の2つのスライダーによってかなりスムーズになりました。下の2つのスライダーは、これらのピクセル強度に適した値に調整されました。スクリプトは例にあります。写真が十分に似ている場合は、あなたのプロセスを自動化することができるかもしれません。出力は白黒または1と0の画像です。あなたはさらなる処理のためにマトリックスでそれらのピクセルをつかむことができました。
あなたはまた、ピクセルカラーの分析をしたくなるかもしれません。たぶんクラスタリングはあなたに与えるでしょうダーク青と濃いクラスタの青いペア。たぶんあなたは濃い青のクラスタ化されたピクセルのxy座標を使うことができました。例えば:
// load the test image
img = open("$desktop/large.png","png");
// grab the rgb data from the image
{r,g,b} = img<<GETPIXELS></GETPIXELS>
クラスタリング結果がイメージに変わった
必要なパラメータを見つけるために、クラスタ化されたピクセルのXY座標を操作するほうが理にかなっているかもしれません。
再:画像内の事前定義されたゾーンを抽出する親愛なるCraige、
ご提案ありがとうございます。
残念ながら、画像内の円の位置は写真上から別の写真に移動する可能性があります(まだ標準化されていません)。
私の質問は、それが自動の方法で円の輪郭を検出することが可能であるかどうかです。
Krs、
サミル
再:画像内の事前定義されたゾーンを抽出するはい。画像全体のピクセル値の行列を取得します。
image << getpixels(スクリプトのインデックスを確認して、今すぐ机から離れています)。
あなたは別々のr、g、bチャンネルとしてまたは組み合わされたJMPカラーとしてピクセルを得ることができます。
次に、同じ次元のマスク行列が必要です。保持するピクセルは1、拒否するピクセルは0です。あなたは1を白、0を黒にしてペイントプログラムを使うことができます。その画像をロードして、たった1つのチャンネル、赤を取得します(r、g、bは白黒の画像でも同じであるはずです)。これは0と1の値を持ちます。
次に、結果をどのようにしたいかを決めます。ただ興味深いピクセルだけの順不同リストですか?あるいは、興味のない値をゼロに設定した、以前と同じサイズの行列?
imageMatrix [Loc(mask)]は、maskが0ではない値を持っていた場合の番号なしピクセルを返します。
imageMatrix:* maskは、マスクが0の場合は0、マスクが1の場合は元の値を返します。(:*は要素ごとの乗算です。*は行列代数の乗算です…あなたが望むものではありません。)
この役職役立つかもしれません。