[X]关闭

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

文档创建者:FPGA课程
浏览次数:109
最后更新: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_dilate_0=zeros(row,col); for i = 2:1:row-1
  12. for j = 2:1:col-1
  13. image_dilate_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
  16. end
  17. image_dilate_ 1=zeros(row,col); for i = 2:1:row-1
  18. for j = 2:1:col-1
  19. image_dilate_ 1(i,j) =...
  20. 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);
  21. end end
  22. image_dilate_2=zeros(row,col); for i = 2:1:row-1
  23. for j = 2:1:col-1
  24. image_dilate_2(i,j) =...
  25. 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)     |... image_dilate_ 1(i+1,j-1)|image_dilate_ 1(i+1,j)|image_dilate_ 1(i+1,j+1);
  26. end end


  27. image_erode_0=zeros(row,col); for i = 2:1:row-1
  28. for j = 2:1:col-1
  29. image_erode_0(i,j) =...
  30. image_dilate_2(i-1,j-1)&image_dilate_2(i-1,j)&image_dilate_2(i-1,j+1)&...   image_dilate_2(i,j-1)    &image_dilate_2(i,j)    &image_dilate_2(i,j+1)    &... image_dilate_2(i+1,j-1)&image_dilate_2(i+1,j)&image_dilate_2(i+1,j+1);
  31. end end
  32. image_erode_1=zeros(row,col); for i = 2:1:row-1
  33. for j = 2:1:col-1
  34. image_erode_1(i,j) =...
  35. 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);
  36. end end
  37. image_erode_2=zeros(row,col); for i = 2:1:row-1
  38. for j = 2:1:col-1
  39. image_erode_2(i,j) =...
  40. 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);
  41. end end



  42. subplot(331);
  43. imshow(image_gray); title('the image gray image'); subplot(332);
  44. imshow(image_binary); title('the image binary image'); subplot(334);
  45. imshow(image_dilate_0); title('the image dilate 0 image'); subplot(335);
  46. imshow(image_dilate_ 1); title('the image dilate 1 image'); subplot(336);
  47. imshow(image_dilate_2); title('the image dilate 2 image'); subplot(337);
  48. imshow(image_erode_0); title('the image erode 0 image'); subplot(338);
  49. imshow(image_erode_ 1); title('the image erode 1 image'); subplot(339);
  50. imshow(image_erode_2); title('the image erode 2 image');
复制代码

2.2Verilog代码分析
  1. image_dilate_filtering u_image_dilate_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                       (dilate_hsyn            ),
  9. .o_vs                       (dilate_vsyn            ),
  10. .o_en                       (dilate_de                ),
  11. .o_binary        (dilate_data             )
  12. );

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

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

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

441bd197b71a42f2a8202e9709f3dfff.jpg
5 硬件连接
硬件连接如图所示:
1afb97bc77574d7c85a75ad4514ea8df.jpg
6 上板实验结果
实验结果如图所示:
3ca7ee834f2f4018804431cb752a2811.jpg

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

本版积分规则