イメージを扱ったのfor文について
4 ビュー (過去 30 日間)
古いコメントを表示
for文を使ってイメージの1pixelを中心とした、9*9pixelのブロックの標準偏差を求め、それを1pixelずつずらしイメージの全てのpixelにその処理を行いたいです。
このとき、イメージの端のpixelを中心とすると、数値のない空白の部分が出来ると思うのですが、その部分をどうやってプログラムすれば良いのか分からないです。
しっかりと、9*9pixelのブロックがイメージの中に収まる部分はプログラムとして書けたのですが…
ご教授おねがいします。
0 件のコメント
採用された回答
Shunichi Kusano
2021 年 10 月 5 日
もしimage processing toolboxをお持ちであれば、stdfiltという関数がされたいことそのものずばりを行うことができます。for文使うとどうしても処理速度が遅くなるので、基本的にはこういった用意された関数を使うのをおススメいたします。
同じようなことができる関数としてcolfiltというものもあります。
もし、勉強がてら自分で実装したいということでしたらやり方としては二通り思いつきます。
1.窓の大きさをmin,max関数で調整
おそらく中心ピクセルに対して±4ピクセルでブロックを定義していると思いますが、その際に、
% 中心ピクセルのインデックスをx_idx,y_idxとすると
x1 = max(1,x_idx-4); % インデックスがゼロ以下にならないように調整
x2 = min(W,x_idx+4); % インデックスが画像サイズを超えないように調整。Wは画像の横幅
% y方向も同様
といった感じで、画像サイズを超えないように定義します。そうすると局所領域が[y1:y2,x1:x2]という形で得られますので、これを抜き出してきてstdを計算します。
2.最初に画像をパディングしてしまう
窓がはみ出す分を始めから想定してその分のデータを作っておくという考え方です。これについては、padarray関数を見てみてください。イメージがわかると思います。パディングした後で、本来の画のサイズ分だけforループを回せばいいです。パディングの仕方によって値が変わってきますが、symmetric(鏡像)が無難かと思います。
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で 相関と畳み込み についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!