引言
本文是之前AI加速器项目的一个补充,即之前AI加速器中PL部分的工作。本文主要介绍的是一种sobel图像边缘检测算法的Python及Verilog实现。
一、sobel图像边缘检测算法的Python实现
sobel图片边缘检测算法的核心就是图片的卷积操作,我们所用的是如下图所示的一个3*3的卷积核。
-1 | 0 | 1 |
-2 | 0 | 2 |
-1 | 0 | 1 |
图片的卷积操作简单来说就是移位相乘然后累加运算,具体资料各位可以上网查找,关于原理方面的介绍非常多,本文不再赘述。在本文中,利用Python对lenna图做了一个简单的边缘提取操作,一是为verilog提供测试数据,二是获取结果与verilog仿真结果形成比较,以判断verilog仿真结果的效果如何。
- Python实现代码
# -*- coding: utf-8 -*-
"""
Created on Sat Aug 15 14:44:19 2020
@author: lenovo
"""
import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
#import skimage
import tensorflow as tf
#import numpy as np
# 有符号数转十六进制补码,返回值为字符串
def int_to_hex(num):
if(num < 0):
result = hex(num & 0xff)
else:
result = hex(num)
return result
image = mpimg.imread('lenna.jpg') # 读取lenna图
#image = skimage.transform.resize(image, (64,64)) # 减小像素
#image = (image * 255).astype(np.uint8)# 限定数据范围为 0 - 255
'''
#写入图片数据到txt文件中供verilog仿真使用 512*512=262144
for i in range(512):
for j in range(512):
fp = open('lenna.txt',mode='a')# 追加模式
fp.write(int_to_hex(image[i][j])[2:4]+"\n")
fp.close()# 关闭文件
'''
# 显示原始图片
plt.figure(1)
plt.imshow