[X]关闭

[米联客-XILINX-H3_CZ08_7100] FPGA_图像入门连载-18FPGA 实现图像二值化开运算处理

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

​ 软件版本: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 图像二值化开运算算法简介
开运算就是先进行腐蚀然后进行膨胀,这样操作后可以使得原本连接在一起的区域,变成了不连通的区域。主 要针对细小的突起、细的连接线、图像中的弯口、孤立的小块或齿状物体的效果明显。
2 设计分析
2.1Matlab代码分析
源代码如下:

  1. clear;clear all;clc;

  2. image_in = imread('geeker_fpga.jpg'); [row,col,n] = size(image_in);
  3. image_gray    = rgb2gray(image_in);


  4. image_binary=zeros(row,col); for i=1:row
  5. for j=1:col
  6. if image_gray(i,j) > 92%阈值处理
  7. image_binary(i,j)=255; else
  8. image_binary(i,j)=0; end
  9. end end
  10. %开运算先腐蚀后膨胀
  11. image_erode_0=zeros(row,col); for i = 2:1:row-1
  12. for j = 2:1:col-1
  13. image_erode_0(i,j) =...
  14. image_binary(i-1,j-1)&image_binary(i-1,j)&image_binary(i-1,j+1)&...   image_binary(i,j-1)    &image_binary(i,j)    &image_binary(i,j+1)    &... image_binary(i+1,j-1)&image_binary(i+1,j)&image_binary(i+1,j+1);
  15. end end
  16. image_erode_1=zeros(row,col); for i = 2:1:row-1
  17. for j = 2:1:col-1
  18. image_erode_1(i,j) =...
  19. image_erode_0(i-1,j-1)&image_erode_0(i-1,j)&image_erode_0(i-1,j+1)&...   image_erode_0(i,j-1)    &image_erode_0(i,j)    &image_erode_0(i,j+1)    &... image_erode_0(i+1,j-1)&image_erode_0(i+1,j)&image_erode_0(i+1,j+1);
  20. end end
  21. image_erode_2=zeros(row,col); for i = 2:1:row-1
  22. for j = 2:1:col-1
  23. image_erode_2(i,j) =...
  24. image_erode_1(i-1,j-1)&image_erode_ 1(i-1,j)&image_erode_ 1(i-1,j+1)&...   image_erode_1(i,j-1)    &image_erode_ 1(i,j)    &image_erode_ 1(i,j+1)    &... image_erode_1(i+1,j-1)&image_erode_ 1(i+1,j)&image_erode_ 1(i+1,j+1);
  25. end end


  26. image_dilate_0=zeros(row,col); for i = 2:1:row-1
  27. for j = 2:1:col-1
  28. image_dilate_0(i,j) =...
  29. image_erode_2(i-1,j-1)|image_erode_2(i-1,j)|image_erode_2(i-1,j+1)|...   image_erode_2(i,j-1)    |image_erode_2(i,j)    |image_erode_2(i,j+1)     |... image_erode_2(i+1,j-1)|image_erode_2(i+1,j)|image_erode_2(i+1,j+1);
  30. end end
  31. image_dilate_ 1=zeros(row,col); for i = 2:1:row-1
  32. for j = 2:1:col-1
  33. image_dilate_ 1(i,j) =...
  34. image_dilate_0(i-1,j-1)|image_dilate_0(i-1,j)|image_dilate_0(i-1,j+1)|...   image_dilate_0(i,j-1)    |image_dilate_0(i,j)    |image_dilate_0(i,j+1)     |... image_dilate_0(i+1,j-1)|image_dilate_0(i+1,j)|image_dilate_0(i+1,j+1);
  35. end end
  36. image_dilate_2=zeros(row,col); for i = 2:1:row-1
  37. for j = 2:1:col-1
  38. image_dilate_2(i,j) =...
  39. image_dilate_ 1(i-1,j-1)|image_dilate_ 1(i-1,j)|image_dilate_ 1(i-1,j+1)|...   image_dilate_ 1(i,j-1)    |image_dilate_ 1(i,j)    |image_dilate_ 1(i,j+1)     |...
  40. image_dilate_ 1(i+1,j-1)|image_dilate_ 1(i+1,j)|image_dilate_ 1(i+1,j+1); end
  41. end

  42. subplot(331);
  43. imshow(image_gray); title('the image gray image'); subplot(332);
  44. imshow(image_binary); title('the image binary image');

  45. subplot(334);
  46. imshow(image_erode_0); title('the image erode 0 image'); subplot(335);
  47. imshow(image_erode_ 1); title('the image erode 1 image'); subplot(336);
  48. imshow(image_erode_2); title('the image erode 2 image');

  49. subplot(337);
  50. imshow(image_dilate_0); title('the image dilate 0 image'); subplot(338);
  51. imshow(image_dilate_ 1); title('the image dilate 1 image'); subplot(339);
  52. imshow(image_dilate_2); title('the image dilate 2 image');
复制代码

2.2Verilog代码分析
  1. image_erode_filtering u_image_erode_filtering (
  2. .i_clk                       (i_clk                               ),
  3. .i_rst_n            (i_rst_n                    ),
  4. .i_hsyn                    (i_hsyn                            ),
  5. .i_vsyn                    (i_vsyn                            ),
  6. .i_en                (i_en                               ),
  7. .i_binary         (i_binary                 ),
  8. .o_hs                       (erode_hsyn                    ),
  9. .o_vs                       (erode_vsyn                    ),
  10. .o_en                       (erode_de                ),
  11. .o_binary        (erode_data             )
  12. );

  13. image_dilate_filtering u_image_dilate_filtering (
  14. .i_clk                       (i_clk                               ),
  15. .i_rst_n            (i_rst_n                    ),
  16. .i_hsyn                    (erode_hsyn                    ),
  17. .i_vsyn                    (erode_vsyn                    ),
  18. .i_en                (erode_de                ),
  19. .i_binary         (erode_data             ),
  20. .o_hs                       (dilate_hsyn            ),
  21. .o_vs                       (dilate_vsyn            ),
  22. .o_en                       (dilate_de                ),
  23. .o_binary        (dilate_data             )
  24. );
复制代码

2.3 工程结构分析

我们将图像算法的模块做成 IP 后,在vivado 中进行工程的搭建,工程结构如图所示:
fdf6dff44b2749f38aed1aa7009cc43e.jpg
3 仿真及结果
3.1Matlab实验结果
7a2999d13d6541c2804b9e0ad497c439.jpg
3.2Modelsim实验结果

af6f71fe16914b52b998339afe479154.jpg

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

53b4cbc45e604a3185bd7d3c901e5983.jpg
5 硬件连接
硬件连接如图所示:
0e73fc8c164a41fd92430e2521a42a70.jpg
6 上板实验结果
实验结果如图所示:
9c783cb3146c4274adbb10c2ecb7e92e.jpg

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

本版积分规则