本帖最后由 FPGA课程 于 2024-10-18 17:31 编辑
软件版本:VIVADO2021.1
操作系统:WIN10 64bit
硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA
实验平台:米联客-MLK-H3-CZ08-7100开发板
板卡获取平台:https://milianke.tmall.com/
登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!
1 图像高斯滤波算法简介
高斯滤波在图像处理的概念下,将图像频域处理和时域处理相联系,作为低通滤波器使用,可以将低频能量滤 去,起到图像平滑作用。高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的降噪过程。 通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和模板邻域内的其他像 素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(3x3、5x5)扫描图像中的每一个像素,用模板确 定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。 高斯滤波的 3x3 的匹配模板如下:
I(i-1,j-1) | I(i-1,j) * 2 | I(i-1,j+1) | I(i ,j-1) * 2 | I(i,j ) * 4 | I(i ,j+1) * 2 | I(i+1,j-1) | I(i+1,j) * 2 | I(i+1,j+1) |
其中, I(i,j ) 表示当前像素。 在图像处理中,高斯滤波有两种实现方式,一是用离散化窗口滑窗卷积,另一种通过傅里叶变换。最常见的是 第一种滑窗实现,只有当离散化的窗口非常大,用滑窗计算量非常大的情况下,可能会考虑基于傅里叶变换的实现 方法。卷积中每个像素点的值都是由其本身和领域内的其他像素经过加权平均后得到。上述匹配模板为二维数组所 存放的系数,对于窗口模板大小为(2k+1)x(2k+1),各个元素的计算公式为
后经过归一化出路为
2 设计分析2.1Matlab代码分析 源代码如下: - clear;clear all;clc;
- image_in = imread('lena_1280x720.jpg'); % [row,col,n] = size(image_in);
- image_gray = rgb2gray(image_in);
- [row,col] = size(image_gray);
- image_gray = im2double(image_gray);
- gaussion_image = zeros(size(image_gray), 'like', image_gray);
- for i = 2:1:row-1
- for j = 2:1:col-1
- gaussion_image(i,j) = (...
- image_gray(i-1,j-1)+image_gray(i-1,j)*2+image_gray(i-1,j+1)+...
- image_gray(i,j-1)*2+image_gray(i,j )*4+image_gray(i,j+1)*2+... image_gray(i+1,j-1)+image_gray(i+1,j)*2+image_gray(i+1,j+1))/16;
- end end
- image_gray1 = imnoise(image_gray,'salt & pepper',0.05);%加入椒盐噪声 image_gray1 = im2double(image_gray1); %转换为双精度
- gaussion_image1 = zeros(row,col); for i = 2:1:row-1
- for j = 2:1:col-1
- gaussion_image1(i,j) = (...
- image_gray1(i-1,j-1)+image_gray1(i-1,j)*2+image_gray1(i-1,j+1)+... image_gray1(i,j-1) +image_gray1(i,j) *4+image_gray1(i,j+1) +... image_gray1(i+1,j-1)+image_gray1(i+1,j)*2+image_gray1(i+1,j+1))/9;
- end end
- image_gray2 = imnoise(image_gray,'gaussian',0.05); image_gray2 = im2double(image_gray2);
- gaussion_image2 = zeros(row,col);
- for i = 2:1:row-1
- for j = 2:1:col-1
- gaussion_image2(i,j) = (...
- image_gray2(i-1,j-1)+image_gray2(i-1,j)*2+image_gray2(i-1,j+1)+... image_gray2(i,j-1)*2+image_gray2(i,j) *4+image_gray2(i,j+1)*2 +... image_gray2(i+1,j-1)+image_gray2(i+1,j)*2+image_gray2(i+1,j+1))/9;
- end end
- figure
- subplot(321);
- imshow(image_gray ), title('the original gray image');
- subplot(322);
- imshow(gaussion_image), title('the gaussion image'); subplot(323);
- imshow(image_gray1), title('the salt & pepper image'); subplot(324);
- imshow(gaussion_image1), title('the gaussion1 image'); subplot(325);
- imshow(image_gray2), title('the gaussian image'); subplot(326);
- imshow(gaussion_image2), title('the gaussion2 image');
复制代码
2.2Verilog代码分析 - always@(posedge i_clk ornegedge i_rst_n) begin
- if(!i_rst_n) begin
- sum_r1 <= 12'd0; sum_g1 <= 12'd0; sum_b1 <= 12'd0; sum_r2 <= 12'd0; sum_g2 <= 12'd0; sum_b2 <= 12'd0; sum_r3 <= 12'd0; sum_g3 <= 12'd0; sum_b3 <= 12'd0;
- end else begin
- sum_r1 <= r_temp_ 11*1 + r_temp_ 12*2 + r_temp_ 13*1; sum_r2 <= r_temp_21*2 + r_temp_22*4 + r_temp_23*2; sum_r3 <= r_temp_31*1 + r_temp_32*2 + r_temp_33*1;
- sum_g1 <= g_temp_ 11*1 + g_temp_12*2 + g_temp_ 13*1; sum_g2 <= g_temp_21*2 + g_temp_22*4 + g_temp_23*2; sum_g3 <= g_temp_31*1 + g_temp_32*2 + g_temp_33*1;
- sum_b1 <= b_temp_ 11*1 + b_temp_12*2 + b_temp_ 13*1; sum_b2 <= b_temp_21*2 + b_temp_22*4 + b_temp_23*2; sum_b3 <= b_temp_31*1 + b_temp_32*2 + b_temp_33*1;
- end end
- always@(posedge i_clk ornegedge i_rst_n)
- begin
- if(!i_rst_n) begin
- sum_r <= 12'd0; sum_g <= 12'd0; sum_b <= 12'd0;
- end else begin
- sum_r <= sum_r1 + sum_r2 + sum_r3; sum_g <= sum_g1 + sum_g2 + sum_g3; sum_b <= sum_b1 + sum_b2 + sum_b3;
- end end
- always@(posedge i_clk ornegedge i_rst_n) begin
- if(!i_rst_n) begin
- gau_r <= 8'd0; gau_g <= 8'd0; gau_b <= 8'd0;
- end else begin
- gau_r <= sum_r >> 4; gau_g <= sum_g >> 4; gau_b <= sum_b >> 4;
- end end
复制代码
2.3 工程结构分析 我们将图像算法的模块做成 IP 后,在vivado 中进行工程的搭建,工程结构如图所示:
3 仿真及结果3.1Matlab实验结果
3.2Modelsim实验结果
4 搭建 Vitis-sdk 工程
创建 soc_base sdk platform 和 APP 工程的过程不再重复,可以阅读 3-3-01_sdk_base_app。以下给出创建好 soc_base sdk platform 的截图和对应工程 APP 的截图。 4.1 创建 SDKPlatform工程
4.2SDKAPP工程
5 硬件连接硬件连接如图所示:
6 上板实验结果实验结果如图所示:
|