MATLAB Answers

イメージを扱ったのfor文について

조회 수: 6(최근 30일)
朋貴 熊田
朋貴 熊田 2021년 10월 5일
댓글: 朋貴 熊田 2021년 10월 5일
for文を使ってイメージの1pixelを中心とした、9*9pixelのブロックの標準偏差を求め、それを1pixelずつずらしイメージの全てのpixelにその処理を行いたいです。
このとき、イメージの端のpixelを中心とすると、数値のない空白の部分が出来ると思うのですが、その部分をどうやってプログラムすれば良いのか分からないです。
しっかりと、9*9pixelのブロックがイメージの中に収まる部分はプログラムとして書けたのですが…
ご教授おねがいします。

채택된 답변

Shunichi Kusano
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(鏡像)が無難かと思います。
  댓글 수: 1
朋貴 熊田
朋貴 熊田 2021년 10월 5일
迅速な解答ありがとうございます。
さっそく、熟考してみます!

댓글을 달려면 로그인하십시오.

추가 답변(0개)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!