本帖最后由 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 图像中值滤波算法简介
在图像滤波中,常用的方法是线性滤波技术和非线性滤波技术,线性滤波技术以其完美的理论基础,数学处理 简单、易于采用和硬件实现等优点,一直在图像滤波领域中占有重要的地位。线性滤波对加性高斯噪声有较好的平 滑作用,但对脉冲信号和其他形式的高频分量抑制效果较差,且模糊信号边缘。非线性滤波是基于对输入信号序列 的一种非线性投影关系,常把某一特定的噪声近似为零而保留信号的重要特征,在一定程度上克服线性滤波器的不 足,非线性滤波早期运用较多的是中值滤波器,其应用于多维信号处理时,对窄脉冲信号具有良好的抑制能力,但 中值滤波器对中拖尾和短拖尾分布噪声滤波性能较差,且拖尾越短其滤波能力越差。中值滤波法是一种非线性平滑 技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图 像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的 噪声点。方法是用二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据 序列。二维中值滤波输出为: g(x, y) = med(f (x− k, y − l), (k, l ∈W)) 其中,f(x,y) ,g(x,y)分别为原始图像和处理后图像。W 为二维模板,通常为 3x3 、5x5 区域模板。
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);
- median_image = zeros(size(image_gray), 'like', image_gray);
- for i = 2:1:row-1
- for j = 2:1:col-1
- median_1 = [image_gray(i-1,j-1) image_gray(i-1,j) image_gray(i-1,j+1) image_gray(i,j-1) image_gray(i,j) image_gray(i,j+1) image_gray(i+1,j-1) image_gray(i+1,j) image_gray(i+1,j+1)];
-
- median_o = sort(median_1);
-
- median_image(i,j) = median_o(5);
- end
- end
- image_gray1 = imnoise(image_gray,'salt & pepper',0.05);
- median_image1 = zeros(size(image_gray), 'like', image_gray);
- for i = 2:1:row-1
- for j = 2:1:col-1
- median_1 = [image_gray1(i-1,j-1) image_gray1(i-1,j) image_gray1(i-1,j+1) image_gray1(i,j-1) image_gray1(i,j) image_gray1(i,j+1) image_gray1(i+1,j-1) image_gray1(i+1,j) image_gray1(i+1,j+1)];
-
- median_o = sort(median_1);
-
- median_image1(i,j) = median_o(5);
- end
- end
- image_gray2 = imnoise(image_gray,'gaussian',0.05);
- median_image2 = zeros(size(image_gray), 'like', image_gray);
- for i = 2:1:row-1
- for j = 2:1:col-1
- median_1 = [image_gray2(i-1,j-1) image_gray2(i-1,j) image_gray2(i-1,j+1) image_gray2(i,j-1) image_gray2(i,j) image_gray2(i,j+1) image_gray2(i+1,j-1) image_gray2(i+1,j) image_gray2(i+1,j+1)];
-
- median_o = sort(median_1);
-
- median_image2(i,j) = median_o(5);
- end
- end
- figure
- subplot(321);
- imshow(image_gray ), title('the original gray image');
- subplot(322);
- imshow(median_image), title('the median image');
- subplot(323);
- imshow(image_gray1), title('the salt & pepper image');
- subplot(324);
- imshow(median_image1), title('the median1 image');
- subplot(325);
- imshow(image_gray2), title('the gaussian image');
- subplot(326);
- imshow(median_image2), title('the median2 image');
复制代码
2.2Verilog代码分析 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 上板实验结果实验结果如图所示:
|