FC2カウンター FPGAの部屋 画像のエッジ検出4(実機でテスト)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

画像のエッジ検出4(実機でテスト)

画像のエッジ検出3(シミュレーション)”でシミュレーションが終了したので、実機で試してみた。
やってみたが、最初はかなり真っ白、どこかおかしい。トラブルシュート開始。
その結果、BRAMのアドレスのダブルバッファ用アドレス発生がおかしいことを発見して修正した。その結果、結構エッジが見えるようになった。
差分のスレッショルドは16にし、元の画像を輝度を1/2にして加えてある。
edge_detect_9_091106.jpg

結構エッジは見えてきたようだ。結構見ていると面白いがエッジの検出具合がいまいちだ。顔とかの輪郭は出るが、やはりコントラスト差がないところは厳しい。

現在のエッジ検出方式は縦横斜めに差分を取ってスレッショルドの値以上ならば大きな値を輝度データとしてセットしている。(下図参照)これは、私がこうやったらエッジが検出できるんじゃないかな?と思った方法で一般的な方法ではない。
edge_detect_1_091028.png

しかし、今日、教授にお聞きしたところ、普通は3X3などのマトリクスを使い、それぞれの位置で係数をかけて中心の値を求めるとエッジの検出ができるとのこと。
検索してみると、”ディジタル信号処理講座”やkoujinz blogの”エッジ検出・エッジ強調・ぼかし”記事を読むと3X3のオペレータで各要素からの差分を取るようだ。(下に示すようなオペレータ)各要素をORしてスレッショルド決めて1、0判定をすることはしていない。
----------
| -1| -1| -1|
----------
| -1|  8| -1|
----------
| -1| -1| -1|
----------
差分、つまり微分するということのようだが、いろいろな係数があるみたい。これも試してみたい。
未来の自分の為にもう少し説明しておくと、画素の1部分を切り取った3X3の領域を考える。
---------------------------
|Xn-1Yn-1| XnYn-1| Xn+1Yn-1|
---------------------------
| Xn-1Yn |  XnYn | Xn+1Yn |
---------------------------
| Xn-1Yn+1| XnYn+1 | Xn+1Yn+1|
----------------------------
上のオペレータを適用した場合の差分の式を下に示す。
XnYnのところの差分 = -(Xn-1Yn-1) -(XnYn-1) -(Xn+1Yn-1)
              -(Xn-1Yn) +8(XnYn) -(Xn+1Yn)
              -(Xn-1Yn+1) -(XnYn+1) -(Xn+1Yn+1)

画像のグレースケール/ネガティブ/エッジ検出”を参考にした。この3X3のオペレータはとても便利で係数を変えればぼかしなども係数を変えることで対応することができる。
良く考えれば、私のやっていた方式も2X2の画素の演算と考えることができるので、下のような微分オペレータを作ることができそう。
-------
| -1| -1|
-------
| -1| 3|
-------
これで、どうなるか一回やってみようと思う。
(追加)”コンボリューションを用いた画像の平滑化、鮮鋭化とエッジ検出”もわかりやすかった。
  1. 2009年11月07日 04:45 |
  2. 画像処理
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/1285-e149ef96
この記事にトラックバックする(FC2ブログユーザー)