”
画像のエッジ検出(横方向のみ)1”で作ったコードをインプリメントして実機で確かめてみた。
最初に、Edge_Threshold_Def(エッジ検出のスレッショルド)が64でやってみたが、真っ暗で隣のピクセルと64値が離れているところはないようだった。
次に、Edge_Threshold_Def = 32 とした。こうすると少しはエッジが見えてきた。詳しくは下図参照。

後の私の顔とかが映っていますが、エッジが少し見えてきた。まだ足りなそうなので、Edge_Threshold_Def = 16 としたところ下のようになった。下図参照。

だいぶエッジが見えてきた。これだけだとなにを撮っているかがわからないので、白黒画像で表示した写真を下に示す(若干位置が違うけど、こんな雰囲気)。

やはりエッジの表示だけだとさびしいし、画像のどの部分のエッジを取っているかが良くわからない。そこで、CMOSカメラのY成分と重ね合わせることにした。今は、Edge_Value_Def = 128なので、ちょうどCMOSカメラのY成分(cam_ydata_2d) を1ビット右シフトしてORすれば、ちょうど良いのではないかと思った。早速、Camera_Controller.vhd のエッジを検出する部分を下のように書き換えた。
-- 1つ前のYデータと現在のYデータを比較してエッジを検出する
process(h_valid_flag, alu_out, cam_ydata_2d) begin
if h_valid_flag='0' then -- 1つ前のYデータがない
ydata_out <= '0' & cam_ydata_2d(7 downto 1);
elsif h_valid_flag='1' then
if alu_out >= Edge_Threshold_Def then
ydata_out <= CONV_STD_LOGIC_VECTOR(Edge_Value_Def, 8) or ('0' & cam_ydata_2d(7 downto 1));
else
ydata_out <= '0' & cam_ydata_2d(7 downto 1);
end if;
else
ydata_out <= '0' & cam_ydata_2d(7 downto 1);
end if;
end process;
こうしてディスプレイに表示された画面を下図に示す。

これを見ると画像のどの位置のエッジを検出しているかが良くわかる。雑誌のエッジ、コンフィグケーブルのUSBケーブルのエッジを検出しているのがわかる。雑誌を見ると、横方向のエッジは検出しているが縦方向のエッジは検出してないことがわかる。これは、横方向のエッジのみ検出する方式を使用しているので当然だ。
今度は縦横斜めのエッジを検出して、横だけ検出のものと比較してみたい。
- 2009年11月03日 04:36 |
- 画像処理
-
| トラックバック:0
-
| コメント:2
やはりハードウェアでのエッジ検出は面白そうですね!!
その昔PHSのオプションカメラだった「Treva」と300円液晶でリアルタイムエッジ検出回路を作ってみたくなりました!
- 2009/11/03(火) 21:22:03 |
- URL |
- いえなが #-
- [ 編集 ]
いえながさん、こんにちは。
エッジ検出は見ていると結構面白いです。画像系はすぐに目に訴えるのが良いですね。
- 2009/11/04(水) 04:18:44 |
- URL |
- marsee #f1oWVgn2
- [ 編集 ]