问答 店铺
热搜: ZYNQ FPGA discuz

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

微信扫一扫 分享朋友圈

已有 365 人浏览分享

开启左侧

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

[复制链接]
365 0
AMD-FPGA课程
AMD课程: 图像算法 » 图像新手入门实验
AMD板卡: MLK-Hx系列 » MLK-H10-CK203-PH1A180
​ 软件版本: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

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

本版积分规则

0

关注

0

粉丝

269

主题
精彩推荐
热门资讯
网友晒图
图文推荐

  • 微信公众平台

  • 扫描访问手机版