FC2カウンター FPGAの部屋 画像のエッジ検出5(2X2の画素の演算でやってみた)
FC2ブログ

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

FPGAの部屋

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

画像のエッジ検出5(2X2の画素の演算でやってみた)

画像のエッジ検出4(実機でテスト)”の最後に書いた2X2の画素の演算でやってみた。
-------
| -1| -1|
-------
| -1| 3|
-------
上の演算でやってみるために、VHDLコードを書きなおした。演算部分を下に示す。

    -- 1クロック前のBRAMの出力と現在の値の1クロック前の値を保持
    process(clk) begin
        if clk'event and clk='1' then
            if reset='1' then
                bram_data_1d <= (others => '0');
                y_data_1d <= (others => '0');
            else
                if r_w='1' then
                    y_data_1d <= cam_ydata_2d;
                    bram_data_1d <= bram_data;
                end if;
            end if;
        end if;
    end process;
    
    diff_cal_val <= "011"*(cam_ydata_2d) - ("000"&bram_data_1d) - ("000"&bram_data) - ("000"&y_data_1d);
    -- マトリクスの絶対値
    process(diff_cal_val) begin
        if diff_cal_val(10)='1' then -- 負の値
            abs_diff_cal_val <= not(diff_cal_val-1);
        else -- 正の数
            abs_diff_cal_val <= diff_cal_val;
        end if;
    end process;
    ydata_out <= x"FF" when (abs_diff_cal_val(10) or abs_diff_cal_val(9) or abs_diff_cal_val(8))='1' else abs_diff_cal_val(7 downto 0);    


これでシミュレーションで確かめてみたが、演算はあっているようだ。
ちなみに最初は飽和演算を入れていなかったのだが、”Sobel Core Module Verilog Code”を参考にさせていただいた。
インプリメントしてディスプレイ出力を見てみた。下の写真。
edge_detect_10_091109.jpg

うまくいかない。こうなったら3X3の画素の演算をインプリメントしてみようと思う。

(2009/11/13 追記)
BRAMによるダブルバッファリングのアドレスのコードにバグが見つかりました。バグを修正後、正常にエッジが表示されるようになりました。結果を下図に示します。
edge_detect_14_091113.jpg
  1. 2009年11月09日 21:41 |
  2. 画像処理
  3. | トラックバック:0
  4. | コメント:4

コメント

X方向左側から64ピクセルあたりまで、それらしい画像が出ているようなのでBRAMへの読み書きアドレスがおかしくありませんか?
256,512あたりも、それっぽい演算をしているようですし。

カメラの評価をする場合は、キャプチャボタンを付けて取り込んだ静止画にフィルタをかけるほうがいいです。
フィルタ前の画像と、フィルタ後の画像が切り替えられると目で確認しやすいです。
(今回の場合だと、フィルタかかっているところとかかかっていないところがすぐわかる)
明かりは蛍光灯でもインバータ式を使うといいです。これでカメラのフリッカー検出がうまくいかないときでも安定した画像が得られます。
  1. 2009/11/11(水) 13:19:06 |
  2. URL |
  3. おる #-
  4. [ 編集 ]

X方向左側から64ピクセルあたりまで、それらしい画像が出ているようなので
BRAMへの読み書き込みアドレスがおかしくありませんか?
256,512あたりも、それっぽい演算をしているようですし。

カメラの評価をする場合は、キャプチャボタンを付けて取り込んだ静止画に
フィルタをかけるほうがいいです。あと、フィルタ前の画像とフィルタ後の
画像が切り替えられると目で確認しやすいです(今回の場合だと、フィルタの
かかってる箇所と、かかってない箇所が一目瞭然かも)

照明は蛍光灯でもインバータ式を使うといいです。これでカメラのフリッカー
検出がうまくいかないときでも安定した画像が得られます。
  1. 2009/11/11(水) 13:23:51 |
  2. URL |
  3. おる #-
  4. [ 編集 ]

ごめんなさい。
コメント二重投稿されてしまいました。
  1. 2009/11/11(水) 13:30:41 |
  2. URL |
  3. おる #-
  4. [ 編集 ]

おるさん、こんにちは。ご指摘ありがとうございます

>X方向左側から64ピクセルあたりまで、それらしい画像が出ているようなので
そうですか?なんか白黒が反転しているように見えます。エッジ検出ということから言うと、前の方がエッジ検出しているように見えます。
http://marsee101.blog19.fc2.com/blog-entry-1285.html

>カメラの評価をする場合は、キャプチャボタンを付けて取り込んだ静止画にフィルタをかけるほうがいいです。
ボタンが付いていないんです。つければよいという話もありますが、とりあえず、そのままやります。

>照明は蛍光灯でもインバータ式を使うといいです。これでカメラのフリッカー検出がうまくいかないときでも安定した画像が得られます。
少し筋が入っている気がしますが、だいたい大丈夫かと思います。

いろいろ使い回しができそうなので、3X3の演算の実装をしようと思います。
  1. 2009/11/11(水) 17:23:44 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


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

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