0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA图像处理--高斯模糊(二)

FPGA开源工坊 来源:FPGA开源工坊 2023-10-29 16:26 次阅读

FPGA图像处理--高斯模糊(一)中介绍了怎么使用Python生成高斯模糊需要使用的高斯核,在这个文章中就介绍一下怎么在FPGA中完成高斯模糊。

首先我们使用Python生成一个高斯模糊的参考模型,代码如下:

import cv2 as cv
import numpy as np


img_path = "./sim/img/img.png"
img = cv.imread(img_path)
img_gray = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
h, w = img_gray.shape
# kernel_1d = cv.getGaussianKernel(3, 0.8, ktype=cv.CV_32F)
# kernel_2d = kernel_1d * kernel_1d.T
# kernel_2d = kernel_2d * (1 / kernel_2d[0][0])
# print(kernel_2d)
gauss_kernel = [[1, 2, 1],
                [2, 4, 2],
                [1, 2, 1]]
img_padding = np.zeros((h + 2, w + 2), np.uint8)
img_padding[1:h + 1, 1:w + 1] = img_gray
img_padding[0:1, 1:w + 1] = img_gray[0:1, :]
img_padding[h + 1:h + 2, 1:w + 1] = img_gray[h - 1:h, :]
img_padding[:, 0:1] = img_padding[:, 1:2]
img_padding[:, w + 1:w + 2] = img_padding[:, w:w + 1]
# gauss_img = cv.GaussianBlur(img_gray, (3, 3), 0.8)
gauss_img = np.zeros((h, w), np.uint8)
for i in range(1, h + 1):
    for j in range(1, w + 1):
        gauss_img[i - 1][j - 1] = (img_padding[i - 1][j - 1] * gauss_kernel[0][0] + img_padding[i - 1][j] *
                                   gauss_kernel[0][1] + img_padding[i - 1][j + 1] * gauss_kernel[0][2] + img_padding[i][
                                       j - 1] * gauss_kernel[1][0] + img_padding[i][j] * gauss_kernel[1][1] +
                                   img_padding[i][j + 1] * gauss_kernel[1][2] + img_padding[i + 1][j - 1] *
                                   gauss_kernel[2][0] + img_padding[i + 1][j] * gauss_kernel[2][1] + img_padding[i + 1][
                                       j + 1] * gauss_kernel[2][2]) / 16




def save_file(img, path):
    fp = open(path,'w')
    for i in range(img.shape[0]):
        for j in range(img.shape[1]):
            if i == img.shape[0] - 1 and j == img.shape[1] - 1:
                fp.write(str(img[i][j]))
            else:
                fp.write(str(img[i][j]) + "
")
    fp.close


def img2txt(img, dst):
    f = open(dst,"w")
    for i in range(img.shape[0]):
        for j in range(img.shape[1]):
            if i == img.shape[0] - 1 and j == img.shape[1] - 1:
                f.write(str(img[i][j][0]) + " " + str(img[i][j][1]) + " " + str(img[i][j][2]))
            else:
                f.write(str(img[i][j][0]) + " " + str(img[i][j][1]) + " " + str(img[i][j][2])  + "
")
            
    f.close()


file_path = "./sim/test.txt"
file_path_ref = "./sim/ref.txt"
img2txt(img, file_path)
save_file(gauss_img, file_path_ref)


cv.imshow("lena", img_gray)
cv.imshow("lena_gauss_img", gauss_img)
cv.waitKey()
cv.destroyAllWindows()

在上述代码中完成了读取一张图片,然后进行转灰度和进行高斯模糊的操作,并将原图和高斯模糊后图像数据存到了两个txt中,用于我们仿真

在FPGA中完成高斯模糊比较简单,使用以下代码完成高斯矩阵的乘加。

c2ce1cc8-7632-11ee-939d-92fbcf53809c.png

仿真代码:

首先使用一个模块来读取之前用python生成的原图数据,用于高斯模糊的激励。

c2e330f4-7632-11ee-939d-92fbcf53809c.png

然后例化我们写的高斯模糊模块

c2f4b6f8-7632-11ee-939d-92fbcf53809c.png

最后将仿真结果保存起来,并且在仿真的时候对dut输出的结果和参考模型进行比对,如果出现错误就停止仿真。

c3051f02-7632-11ee-939d-92fbcf53809c.png

仿真结果如下:

c308de6c-7632-11ee-939d-92fbcf53809c.jpg

在仿真的时候会实时打印DUT和参考模型的结果是否比对成功。因为设置了DUT和参考模型的结果之间的阈值为5,所以当两者差值在5以内时都会打印sim success。

仿真对比如下:

c3257c5c-7632-11ee-939d-92fbcf53809c.png

c338f8d6-7632-11ee-939d-92fbcf53809c.png


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21620

    浏览量

    601186
  • 图像处理
    +关注

    关注

    27

    文章

    1275

    浏览量

    56571
  • python
    +关注

    关注

    55

    文章

    4766

    浏览量

    84370

原文标题:FPGA图像处理--高斯模糊(二)

文章出处:【微信号:FPGA开源工坊,微信公众号:FPGA开源工坊】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    模糊图像处理解决方案

    造成图像模糊的原因有很多,且不同原因导致的模糊图像需要不同的方法来进行处理。##图像复原
    发表于 06-11 10:24 1.1w次阅读

    FPGA设计经验之图像处理

    的; 如何基于FPGA进行统计呢? 1)由于是统计图像的直方图,所以一定是统计结果会在图像经过之后才能产生,因此需要进行缓存; 缓存一:统计后的结果; 缓存:经过统计
    发表于 06-12 16:26

    FPGA图像与视频处理培训

     FPGA图像与视频处理培训课程目标:  1、深入了解JPEG标准和H.264标准协议;  2、掌握FPGA图像
    发表于 07-16 14:05

    FPGA将3路图像拼接,什么好算法能模糊拼接处?

    3路sensor采集到的3路图像FPGA将它们从左至右拼接为1副图像。这样,图像1和图像2、图像
    发表于 02-19 10:40

    【NanoPi M2试用体验】图像模糊

    `OpenCV有几个函数,是可以将图像进行模糊处理的,但其实是几个滤波的函数。一、medianBlur函数这个函数就是一个中值滤波的函数,但是运行的结果就是把图像
    发表于 06-19 23:18

    区间模糊高斯型隶属度函数Matlab仿真的问题

    本帖最后由 wanggy0225 于 2017-2-13 21:53 编辑 我想实现区间模糊高斯型隶属度函数仿真及matlab程序,下面的程序是计算m的上下隶属度值的,但其中的P是什么不知道,请大神帮忙解决一下。谢谢
    发表于 02-13 15:50

    基于FPGA图像平滑处理

    基于FPGA图像平滑处理AT7_Xilinx开发板(USB3.0+LVDS)资料共享腾讯链接:https://share.weiyun.com/5GQyKKc百度网盘链接:https
    发表于 07-05 13:51

    FPGA学习案例分享】基于FPGA图像边缘检测例程

    、灰度转换、值化、高斯滤波、 sobel算法等图像处理算法,以及FPGA的实现2、 SDRAM高速接口以及
    发表于 11-29 09:52

    荐读:FPGA设计经验之图像处理

    从中流过,完成一个阶段的运算之后就直接流入第个阶段,不需要把一个计算阶段完成后的数据再送回内存中,再读出来交给下一个阶段的运算。这样就会节省很多时间和功耗。现在用FPGA图像处理
    发表于 06-08 15:55

    为什么高斯滤波广泛的应用在图像处理中?

    为什么高斯滤波广泛的应用在图像处理
    发表于 10-09 06:31

    FPGA图像处理

    FPGA图像处理
    发表于 12-14 22:29 19次下载

    基于梯度方向直方图与高斯金字塔的车牌模糊汉字识别方法

    ,第一层描述了模糊汉字的细节特征,通过对第一层作平滑处理并向下采样得到第层,在描述模糊图像细节特征的基础上突出主体特征;然后对两层
    发表于 12-25 10:43 0次下载
    基于梯度方向直方图与<b class='flag-5'>高斯</b>金字塔的车牌<b class='flag-5'>模糊</b>汉字识别方法

    基于FPGA灰度图像高斯滤波算法的实现

    FPGA仿真篇-使用脚本命令来加速仿真 基于FPGA的HDMI高清显示借口驱动 基于FPGA灰度图像
    发表于 02-20 20:49 7581次阅读
    基于<b class='flag-5'>FPGA</b>灰度<b class='flag-5'>图像</b><b class='flag-5'>高斯</b>滤波算法的实现

    基于FPGA图像处理高斯模糊实现

    高斯模糊(Gaussian Blur)是一种高斯低通滤波,可以过滤掉图像的高频部分,保留低频部分,对于去除高斯噪声非常有效果,常常被用于
    发表于 10-26 09:36 717次阅读
    基于<b class='flag-5'>FPGA</b><b class='flag-5'>图像</b><b class='flag-5'>处理</b>的<b class='flag-5'>高斯</b><b class='flag-5'>模糊</b>实现

    高斯卷积核函数在图像采样中的意义

    。这种平滑处理通过减小图像中像素之间的差异来模糊图像,有助于去除图像中的高频噪声和细节纹理,使图像
    的头像 发表于 09-29 09:33 275次阅读