イメージを扱ったのfor文について
5 views (last 30 days)
Show older comments
for文を使ってイメージの1pixelを中心とした、9*9pixelのブロックの標準偏差を求め、それを1pixelずつずらしイメージの全てのpixelにその処理を行いたいです。
このとき、イメージの端のpixelを中心とすると、数値のない空白の部分が出来ると思うのですが、その部分をどうやってプログラムすれば良いのか分からないです。
しっかりと、9*9pixelのブロックがイメージの中に収まる部分はプログラムとして書けたのですが…
ご教授おねがいします。
0 Comments
Accepted Answer
Shunichi Kusano
on 5 Oct 2021
もし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(鏡像)が無難かと思います。
More Answers (0)
See Also
Categories
Find more on 相関と畳み込み in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!