- ベストアンサー
EXCEL2007 各行列にmedian関数でメディアンフィルタをかける
EXCEL2007 各行列にmedian関数でメディアンフィルタをかけ違うシートに処理後の値を出力 今,A1から順に640×480の整数が.csvファイルで保存されています. 上記の行列にmedian関数を使用して3×3の中央値を求め,それを下記の画像のように中央のセルの値と中央値を置き換えます. この処理を640×480の行列に適用して(一列目と一行目は除く),画像処理にあるメディアンフィルタをかけようと思っています. ですがmedian関数を使用しても下記の画像のように中央値しかえられず,640×480のセルに適用するのには時間がかかりすぎます. そこで,上記の処理を行いかつ,処理後の640×480の中央値を別のシートに同じ配列で出力をしたいのですが,できるでしょうか? おそらくマクロやVBAを利用するのでしょうが,自分は今まで扱ったことがなく困っています. 一応本を買い,読んでみたのですが上記の処理はいろいろな機能が合わさっているため実行するにはどうしたらいいのかわかりません. どなたか,アドバイスまたは何をどのように使えば上記の処理ができるか教えてください. よろしくお願いします.
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
私がhttp://oshiete1.goo.ne.jp/qa5443577.htmlで答えた通り、別 シートのマトリックスを参照するように書いて希望のサイズにド ラッグで複写するだけなんだけどね。1セルずつ置き換えちゃダメ ですよ。全ての画素は独立なんだから。 ちなみに古~いMacの2004で128x128を処理するのに数秒かかる程度 です。一番時間がかかったのは適当な画像を拾ってASCIIで出力す るところかな。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
#1のご回答の方法で関数式の複写機能を使って、関数でも出来るようです。 しかしメヂアン値を飛び飛び複写するなら良いが、メディアン値を連続行に出したいときはどうなるのかな。 ーーー VBAでは範囲はRange(Cells(i,"B"),Cells(i+2,"D")) のようになるので(B,C,D列の場合) たてまとまりが3行の場合は For i=1 to 1000 Step 3 のように左上隅のセルを3つづつ飛ばして(Srep 3)捉えて、最終行まで、繰り返せば出来ると思う。 ーー また Sub test01() m = Application.WorksheetFunction.Median(Range("A1:C3")) MsgBox m End Sub でMedian関数が、VBAからでも使えることを確認した(VBAでは使えない関数もあるので注意)。 やって見てください。 計算されたメヂアン値を受けるセルはCells(k、”S")=m K=K+1 のようにやる。kは書き指すセルの行ポインタとして使うもの。 次々次行につめて書きだされる。
- popuplt
- ベストアンサー率38% (31/81)
>A1から順に640×480の整数 sheet1にデータを入れます。 sheet2には、3×3の中央値を求めるため B2=IF(AND(MOD(ROW(),3)=2,MOD(COLUMN(),3)=2),MEDIAN(Sheet1!A1:C3),"") と入力して640×480の範囲にCopy sheet3に求める表を作ります。 =IF(Sheet2!A1="",Sheet1!A1,Sheet2!A1) と入力して640×480の範囲にCopy
補足
grumpy_the_dwarfさん二度の回答ありがとうございます. 再度質問なんですが,上記の処理のやり方がいまいちわかりません. Sheet2のA1に画像にあるように=MEDIAN(OFFSET(Sheet1!B2,-1,-1,3,3))と打ち込んで,あとはそのセルの右下はじカーソルを持っていき+を希望のサイズの所まで持っていけばよいのでしょうか? わかりにくい説明で申し訳ありませんが,もう一度手順について詳しく教えてください. よろしくお願いします.