FC2カウンター FPGAの部屋 ZUBoard 1CG の PYNQ v3.0.1 で自作のメディアン・フィルタとソーベル・フィルタを動作させる3
fc2ブログ

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

FPGAの部屋

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

ZUBoard 1CG の PYNQ v3.0.1 で自作のメディアン・フィルタとソーベル・フィルタを動作させる3

ZUBoard 1CG の PYNQ v3.0.1 で自作のメディアン・フィルタとソーベル・フィルタを動作させる2”の続き。

RGB 24 ビットの AXI4-Stream データ入出力対応のメディアン・フィルタを Vitis HLS 2023.1 で作成する2”で作成したメディアン・フィルタを使ってみようということで、前回は、作成したブロック・デザインの HDL Wrapper ファイルを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行って、成功した。hwh ファイルと bit ファイルが生成された。今回は、生成されたビット・ファイルと hwh ファイルを ZUBoard 1CG 上の Jupyter Notebook にアップロードし、median_sobel.ipynb ファイルを作成して、メディアン・フィルタとソーベル・フィルタの動作を確認したところ動作した。

ZUBoard 1CG の PYNQ Linux の jupyter_notebooks/examples ディレクトリに median_sobel ディレクトリを作成した。
cd jupyter_notebooks/examples/
sudo mkdir median_sobel


以下のファイルを FileZilla を使って、ZUBoard 1CG の PYNQ Linux のホーム・ディレクトリにアップロードした。
HDL/2023.1/zub1cg/medain_sobel/medain_sobel.runs/impl_1/median_sobel_wrapper.bit
HDL/2023.1/zub1cg/medain_sobel/medain_sobel.gen/sources_1/bd/median_sobel/hw_handoff/median_sobel.hwh
Vitis_HLS/ZUBoard_1CG/2023.1/median_axis_RGB24/test2.jpg
なお、test2.jpg は通常画像にノイズを拡散させた画像となっている。
zub1cg_pynq_165_230816.png

ファイルをホーム・ディレクトリから jupyter_notebooks/examples/median_sobel ディレクトリにコピーした。
cd
sudo mv median_sobel.hwh jupyter_notebooks/examples/median_sobel
mv median_sobel_wrapper.bit jupyter_notebooks/examples/median_sobel/median_sobel.bit
sudo mv test2.jpg jupyter_notebooks/examples/median_sobel


Jupyter Notebook で examples/median_sobel ディレクトリを見た。
zub1cg_pynq_166_230816.png

Jupyter Notebook 上で examples/median_sobel ディレクトリにノートブックを作成した。
名前を Jupyter Notebook 上で median_sobel に変更しようとしたが、どうしてもできない。
ターミナルで jupyter_notebooks/examples/median_sobel ディレクトリに行って、mv コマンドで名前を変更した。
cd jupyter_notebooks/examples/median_sobel
sudo mv Untitled.ipynb median_sobel.ipynb

zub1cg_pynq_167_230816.png

median_sobel.ipynb のコードを”KV260 の PYNQ で自作のメディアン・フィルタとソーベル・フィルタを動作させる2”からコピーして、一部修正した。

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from pynq import allocate, Overlay

median_sobel = Overlay("./median_sobel.bit")

dma = median_sobel.axi_dma_0
median = median_sobel.median_axis_RGB24_0
sobel = median_sobel.sobel_axis_RGB24_0

image_path = "./test2.jpg"
original_image = Image.open(image_path)

canvas = plt.gcf()
size = canvas.get_size_inches()
canvas.set_size_inches(size*2)

width, height = original_image.size
print("Image size: {}x{} pixels.".format(width, height))
plt.figure(figsize=(12, 10));
_ = plt.imshow(original_image)

in_buffer = allocate(shape=(height, width, 3), 
                           dtype=np.uint8, cacheable=1)
out_buffer = allocate(shape=(height, width, 3), 
                            dtype=np.uint8, cacheable=1)

in_buffer[:] = np.array(original_image)

def run_kernel():
    dma.sendchannel.transfer(in_buffer)
    dma.recvchannel.transfer(out_buffer) 
    median.write(0x00,0x01) # start
    sobel.write(0x00,0x01) # start
    dma.sendchannel.wait()
    dma.recvchannel.wait()

print(height)
print(width)

median.register_map.row_size = height
median.register_map.col_size = width
#median.register_map.function_r = 2 # ORG_IMGwAxiDma
median.register_map.function_r = 3 # MEDIANwAxiDma

sobel.register_map.row_size = height
sobel.register_map.col_size = width
#sobel.register_map.function_r = 2 # ORG_IMGwAxiDma
sobel.register_map.function_r = 3 # SOBELwAxiDma

run_kernel()
sobel_image = Image.fromarray(out_buffer)

print("Image size: {}x{} pixels.".format(width, height))
plt.figure(figsize=(12, 10));
_ = plt.imshow(sobel_image)

del in_buffer
del out_buffer


最初に

median.register_map.function_r = 3 # MEDIANwAxiDma

sobel.register_map.function_r = 3 # SOBELwAxiDma

でやってみた結果を示す。
つまり、メディアン・フィルタでノイズを除去しながら、ソーベル・フィルタでエッジを抽出する。
zub1cg_pynq_168_230816.png
zub1cg_pynq_169_230816.jpg
zub1cg_pynq_170_230816.png
zub1cg_pynq_171_230816.jpg

次に、

median.register_map.function_r = 2 # ORG_IMGwAxiDma

sobel.register_map.function_r = 3 # SOBELwAxiDma

でやってみた結果を示す。
つまり、メディアン・フィルタを掛けずにソーベル・フィルタでエッジを抽出する。
zub1cg_pynq_172_230816.jpg

ノイズもエッジを抽出されている。
  1. 2023年08月16日 06:47 |
  2. ZUBoard
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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