問題タブ [ndimage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 線分をnumpy配列に直接「プロット」する
Python で実現した私の最初のプロジェクトの 1 つは、スティック パーコレーションのモンテカルロ シミュレーションを行います。コードは継続的に成長しました。最初の部分は、スティック浸透の視覚化でした。width*length の領域に、特定の長さの定義された密度 (スティック/領域) の直線スティックが、ランダムな開始座標と方向でプロットされます。私は gnuplot をよく使うので、生成された (x, y) の開始座標と終了座標をテキスト ファイルに書き込んで、後で gnuplot にしました。
次に、scipy.ndimage.measurements を使用して画像データを分析する良い方法を見つけました。イメージは、グレースケールで ndimage.imread を使用して読み取られます。結果のnumpy配列は、異なるスティック間の接続にのみ関心があるため、ブール値にさらに縮小されます。結果のクラスターは、ndimage.measurements で分析されます。これにより、一方から他方につながる経路があるかどうかを調べることができます。最小化された例はこちらです。
これは基本的にうまくいきますが、より多くの異なるスティック密度に対して 1000 回の反復を行う細かいモンテカルロ シミュレーションは、8 時間以上実行されることになります。これは、作成された画像と配列が非常に大きく、何千ものスティックがより高い密度でプロットされているという事実によるものです。その理由は、ピクセル化によるエラーを最小限に抑えながら、さまざまなジオメトリ (たとえば、500 ~ 20000 ピクセルの長さ) をシミュレートしたいからです。
画像データを使用せずにベクトル問題として扱うのが最善の方法だと思いますが、アルゴリズムを開始する方法さえわかりません。また、多くの接続により、データ配列が大きくなる可能性もあります。
上記の方法にとどまると、ファイルにデータを書き込んで再読み込みすることはあまり効果的でないことは明らかです。したがって、これを高速化する方法を探しています。最初のステップとして、matplotlib を使用して画像を作成しましたが、少なくとも各スティックを個別のプロット呼び出しでプロットする場合、スティックの数が多いと最大 10 倍遅くなります。配列内にスティック座標のリストを作成し、1 回のプロット呼び出しで完全なリストをプロットすると、速度が向上する可能性がありますが、画像の書き込みと読み取りのボトルネックが残ります。
スティックの白黒画像を表すブール型のnumpy配列を直接生成する効果的な方法を教えてください。たぶん、座標のリストをプロットし、何らかの方法で図を配列に変換しますか? また、線が PIL 画像にプロットされる興味深い議論も見つけました。これは matplotlib よりも高速でしょうか?
python - 大きな配列 (ラスター) でフィルター処理された要素のサイズを選択する
これについて助けが必要かもしれません:
大きなブール値の numpy 配列 (インポートされたラスター) (2000x2000) で、800 単位を超える要素のみを選択しようとしました。(全要素数 > 1000)
私はループを試しました:
しかし、これを行うためのより良い方法があると確信しています。
python - Scipy ndimage median_filter オリジン
たとえば、バイナリ配列がありますa = np.random.binomial(n=1, p=1/2, size=(9, 9))
。3 x 3
のように、カーネルを使用してメディアンフィルタリングを実行しますb = nd.median_filter(a, 3)
。これにより、ピクセルとその 8 つの隣接ピクセルに基づいてメディアン フィルターが実行されるはずです。ただし、カーネルの配置についてはよくわかりません。ドキュメントによると、
origin : スカラー、オプション。
デフォルトがゼロの場合、現在のピクセルと3 x 3
グリッドを右と下に移動する必要がありますか? デフォルトは の中心であるべきではありませんfootprint
か? この例では、とは対照的にどれに3 x 3
対応しますか?(1, 1)
(0, 0)
ありがとう。
python - カラー画像の代わりに平坦化された配列を返す misc.imread を使用して URL から画像を読み取る
URL から画像を読み込もうとしています (Google の Static Maps API によって提供されます)。
画像はブラウザで正常に表示されます。
しかし、misc.imread を使用して配列にロードしようとすると、最終的に 2 次元配列になるようです (つまり、平坦化され、RGB カラーはありません)。
これが私が使用しているコードです(APIキーを隠しました):
私が期待していたのは、形状の 3 次元配列 (278, 256, 3) でした。
たぶん、ファイルを正しく読み取っていませんか?
python - 次元に沿ったオブジェクトのサイズ?
3D ラベル マトリックスがあります。I を使用ndimage.sum
すると、ラベル付けされたオブジェクトのサイズを取得できます。これは、ボリュームに基づくフィルタリングに最適です。私の質問は次のとおりです。たとえば、各軸に沿ってオブジェクトのサイズを簡単に取得して、1つの平面にのみあるオブジェクトを排除できますか?
少しコードがより明確になる可能性があります...
ラベル付けされたオブジェクトのボリュームを表す 1 次元の代わりに、各次元でサーフェスを表す 3D 配列を作成する方法はありますか? 私は最初のオプションを好みますが、各平面の表面を表す 30 次元配列も問題ありません。
python - ジグソーパズルの角と角を検出したいが、各ピースの四隅が見つからない
私はジグソー パズルを持っていて、そのパズルの「通常」、「エッジ」、および「コーナー」ピースを自動的に区別したいと考えています (これらの単語の定義は、ジグソー パズルをやったことがある人には明らかだと思います)。
作業を簡単にするために、9 つのパーツの選択から始めました。そのうち 4 つが通常、4 つがエッジ、1 つがコーナーです。元の画像は次のようになります。
私の最初のアイデアは、各ピースの 4 つの「メジャー コーナー」を検出し、次のように進めることでした。
- 隣接する 2 つの「主要な角」の間の輪郭が直線である場合、それはエッジです。
- 隣接する 3 つの「主要な角」の間の 2 つの輪郭が直線である場合、それは角です。
- 隣接する 2 つの「主要な角」の間に直線がない場合、それは正常な部分です。
ただし、各ピースの 4 つの「メジャー コーナー」を抽出するのに問題があります (これにはハリス コーナーを使用しようとしていました)。
いくつかの前処理を含む私のコードは、私が得たハリスコーナーを含むいくつかの結果と一緒に以下に添付されています. 任意の入力をいただければ幸いです。
python - scipy.ndimage.label で 3D numpy 配列にラベルを付ける
1 と 0 で構成される大きな 3D numpy 配列があります。scipy.ndimage.label ツールを使用して、各サブアレイ (2d) の機能にラベルを付けたいと思います。
3d 配列のサブセットは次のようになります。
このサブセットのごく一部でラベル ツールを使用すると、正しく動作します。
ただし、サブセット全体を使用すると、ラベル ツールが正しく機能しません。
この問題にどのように取り組むことができるかについてのアイデアはありますか?
ps。私がラベル付けしようとしている完全な配列は、350219 個の 2 次元配列で構成されています。
python - numpyの3D密度マップの主軸をデカルト軸に合わせる方法は?
立方体グリッド上の密度値を含む nxnxn numpy 配列があります。密度マップの慣性主軸をグリッドのデカルト x、y、z 軸に合わせようとしています。これまでのところ、次のものがあります。
ここでは、慣性テンソルの固有ベクトルが回転行列を定義すると仮定しています (これは、この質問とこの Web ページなどの Google の結果に基づいて正しいように見えますか?) しかし、これは正しい結果を与えません。
印刷されたマトリックスは次のようになると思います。
(これは間違っている可能性があります)が、最初から単位ベクトルを取得することさえできません。私が得るものは次のとおりです。
問題が私のコードなのか、主軸の回転に関する私の仮定なのかはわかりませんが、助けていただければ幸いです。