[X]关闭

[米联客-XILINX-H3_CZ08_7100] FPGA_图像入门连载-7FPGA 实现图像中心差分变换

文档创建者:FPGA课程
浏览次数:142
最后更新:2024-10-17
文档课程分类-AMD-ZYNQ
AMD-ZYNQ: ZYNQ-FPGA部分 » 2_FPGA实验篇(仅旗舰) » 8-FPGA图像入门
本帖最后由 FPGA课程 于 2024-10-17 13:24 编辑

​ 软件版本: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 图像中心差分变换算法简介
差分图像就是目标场景在连续时间点图像相减所构成的图像,广义的差分图像定义为目标场景在时间点 tk  和 tk+L 所成图像的差别。差分图像是由目标场景在相邻时间点的图像相减得到的,从而能够得到目标场景随时间的变 换。差分图像在许多领域得到了广泛的应用,比如:视频压缩,生物医学诊断,天文学,遥感,人脸识别等。
中心差分图像公式如下:
image.jpg
Ix表示图像像素值,由公式可以得到中心差分像素值。

2 设计分析
2.1Matlab代码分析
源代码如下:

  1. clear;clear all;clc;

  2. image_in = imread('lena_1280x720.jpg'); % [row,col,n] = size(image_in);

  3. image_gray=rgb2gray(image_in);

  4. image_pad = padarray(image_gray,[1,1],'symmetric','both');%功能填充图像或天补充数组 %用法 b = padarray(a,padsize,padval,direction)
  5. padsize 为给出了填充的行数和列数,padval 为‘symmetric’对边界镜像反射来扩展
  6. ‘replicate’表示图像大小通过复制外边界中的值来扩展'circular’图像大小通过将图像看成是一个二维周期函数的一个 周期来进行扩展。
  7. direction 表示填充的方向。它的具体值和描述如下: direction  : 'pre’表示在每一维的第一个元素前填充; 'post’表示在每一维的最后一个元素后填充;
  8. 'both’表示在每一维的第一个元素前和最后一个元素后填充,此项为默认值。

  9. [row,col] = size(image_pad);
  10. image_mid_diff = zeros(row,col);
  11. image_mid_diff(:,2:col-1)= (image_pad(:,3:col)-image_pad(:,1:col-2))/2;%列差分
  12. % image_mid_diff(2:row-1,:)= (image_pad(3:row,:)-image_pad(1:row-2,:))/2;%行差分 image_mid_diff = image_mid_diff(2:end-1,2:end-1);
  13. Figure
  14. subplot(131);
  15. imshow(image_in), title('the original image'); subplot(132);
  16. imshow(image_gray), title('the translated image '); subplot(133);
  17. imshow(image_mid_diff), title('the translated image 1');
复制代码

2.2Verilog代码分析
  1. always@(posedge i_clk ) begin
  2. i_hsyn_d <=    {i_hsyn_d[0],i_hsyn}; i_vsyn_d <=    {i_vsyn_d[0],i_vsyn}; i_en_d       <=  {i_en_d[0]       ,i_en};  i  r  d        <= {i  r  d[7:0] ,i_r};
  3. i  g  d        <= {i  g  d[7:0] ,i_g}; i  b  d        <= {i  b  d[7:0] ,i_b};
  4. end

  5. always@(posedge i_clk ornegedge i_rst_n) begin
  6. if(!i_rst_n) begin
  7. diff_reg_r <= 8'd0; diff_reg_g <= 8'd0; diff_reg_b <= 8'd0;
  8. end    else    begin
  9. diff_reg_r <= (i  r  d[15:8]-i_r)>>1;   diff_reg_g <= (i_g_d[15:8]-i_g)>>1; diff_reg_b <= (i  b  d[15:8]-i_b)>>1;
  10. end end
复制代码

3 工程结构分析
我们将图像中心差分变换的模块做成 IP 后,在vivado 中进行工程的搭建,工程结构如图所示:
28816e2cce3c4ac4aea61e5d713844b8.jpg
4 仿真及结果
4.1Matlab实验结果

65db1e342e254a4da2a817dd7abd3140.jpg
4.2Modelsim实验结果

eda199def8274495a363b70ee1f25778.jpg

5 搭建 Vitis-sdk 工程
创建 soc_base  sdk  platform  和 APP  工程的过程不再重复,可以阅读 3-3-01_sdk_base_app。以下给出创建好soc_base sdk platform 的截图和对应工程 APP 的截图。
5.1 创建 SDKPlatform工程
d3178dc9ab31459380552a246c0c2299.jpg

5.2SDKAPP工程

5d15ad02ff4b48dfac9b785c6fddca5b.jpg
6 硬件连接
硬件连接如图所示:
0ac9ec01e20848e28fffcab30da54d36.jpg
7 上板实验结果
实验结果如图所示:
269f7d0f37494e64a317c6b160f58f9b.jpg

90ce8d7ad0374cb6898f20367d46512c.jpg
90ce8d7ad0374cb6898f20367d46512c.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则