[X]关闭

[米联客-XILINX-H3_CZ08_7100] FPGA_图像入门连载-10FPGA 实现图像中值滤波处理

文档创建者:FPGA课程
浏览次数:93
最后更新:2024-10-18
文档课程分类-AMD-ZYNQ
AMD-ZYNQ: ZYNQ-FPGA部分 » 2_FPGA实验篇(仅旗舰) » 8-FPGA图像入门
本帖最后由 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 (xk, y l), (k, l W))
其中,f(x,y) ,g(x,y)分别为原始图像和处理后图像。W 为二维模板,通常为 3x3 、5x5 区域模板。

2 设计分析
2.1Matlab代码分析
  1. clear;clear all;clc;

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

  4. image_gray  = rgb2gray(image_in);
  5. [row,col]         = size(image_gray);

  6. median_image         = zeros(size(image_gray), 'like', image_gray);
  7. for i = 2:1:row-1
  8.         for j = 2:1:col-1
  9.                 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)];
  10.                
  11.                 median_o = sort(median_1);
  12.                
  13.                 median_image(i,j) = median_o(5);
  14.         end
  15. end

  16. image_gray1         = imnoise(image_gray,'salt & pepper',0.05);
  17. median_image1         = zeros(size(image_gray), 'like', image_gray);
  18. for i = 2:1:row-1
  19. for j = 2:1:col-1
  20. 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)];
  21.                
  22.                 median_o = sort(median_1);
  23.                
  24.                 median_image1(i,j) = median_o(5);
  25.         end
  26. end

  27. image_gray2         = imnoise(image_gray,'gaussian',0.05);
  28. median_image2         = zeros(size(image_gray), 'like', image_gray);
  29. for i = 2:1:row-1
  30.         for j = 2:1:col-1
  31.                 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)];
  32.                
  33.                 median_o = sort(median_1);
  34.                
  35.                 median_image2(i,j) = median_o(5);
  36.         end
  37. end

  38. figure
  39. subplot(321);
  40. imshow(image_gray  ), title('the original gray image');
  41. subplot(322);
  42. imshow(median_image), title('the median image');
  43. subplot(323);
  44. imshow(image_gray1), title('the salt & pepper image');
  45. subplot(324);
  46. imshow(median_image1), title('the median1 image');
  47. subplot(325);
  48. imshow(image_gray2), title('the gaussian image');
  49. subplot(326);
  50. imshow(median_image2), title('the median2 image');
复制代码

2.2Verilog代码分析
  1. always@(posedge i_clk ornegedge i_rst_n) begin
  2. if(!i_rst_n) begin
  3. r_temp_max_ 1 <= 'd0;    r_temp_med_ 1 <= 'd0; r_temp_min_ 1 <= 'd0;  r_temp_max_2 <= 'd0; r_temp_med_2 <= 'd0; r_temp_min_2 <= 'd0;  r_temp_max_3 <= 'd0; r_temp_med_3 <= 'd0; r_temp_min_3 <= 'd0;
  4. end else
  5. Begin//排序最大值和最小值与中值
  6. r_temp_max_ 1 <= (r_temp_ 11 >= r_temp_ 12 && r_temp_ 11 >= r_temp_ 13)?r_temp_ 11:
  7. (r_temp_ 12 >= r_temp_ 11 && r_temp_ 12 >= r_temp_ 13)?r_temp_ 12:
  8. (r_temp_ 13 >= r_temp_ 11 && r_temp_ 13 >= r_temp_ 12)?r_temp_ 13:'d0;
  9. r_temp_med_ 1 <= (r_temp_ 11 >= r_temp_ 12 && r_temp_ 11 <= r_temp_ 13 || r_temp_ 11 <= r_temp_ 12 && r_temp_ 11 >= r_temp_ 13)?r_temp_ 11:
  10. (r_temp_ 12   >=   r_temp_ 11    &&   r_temp_ 12   <=   r_temp_ 13    ||   r_temp_ 12    <=   r_temp_ 11   && r_temp_ 12 >= r_temp_ 13)?r_temp_ 12:
  11. (r_temp_ 13   >=   r_temp_ 11    &&   r_temp_ 13   <=   r_temp_ 12    ||   r_temp_ 13    <=   r_temp_ 11   && r_temp_ 13 >= r_temp_ 12)?r_temp_ 13:'d0;
  12. r_temp_min_ 1 <= (r_temp_ 11 <= r_temp_ 12 && r_temp_ 11 <= r_temp_ 13)?r_temp_ 11:
  13. (r_temp_ 12 <= r_temp_ 11 && r_temp_ 12 <= r_temp_ 13)?r_temp_ 12:
  14. (r_temp_ 13 <= r_temp_ 11 && r_temp_ 13 <= r_temp_ 12)?r_temp_ 13:'d0;
  15. r_temp_max_2 <= (r_temp_21 >= r_temp_22 && r_temp_21 >= r_temp_23)?r_temp_21:
  16. (r_temp_22 >= r_temp_21 && r_temp_22 >= r_temp_23)?r_temp_22:
  17. (r_temp_23 >= r_temp_21 && r_temp_23 >= r_temp_22)?r_temp_23:'d0;
  18. r_temp_med_2 <= (r_temp_21 >= r_temp_22 && r_temp_21 <= r_temp_23 || r_temp_21 <= r_temp_22 && r_temp_21 >= r_temp_ 13)?r_temp_21:
  19. (r_temp_22   >=   r_temp_21   &&   r_temp_22   <=   r_temp_23    ||   r_temp_22   <=   r_temp_21   && r_temp_22 >= r_temp_ 13)?r_temp_22:
  20. (r_temp_23   >=   r_temp_21   &&   r_temp_23   <=   r_temp_22    ||   r_temp_23   <=   r_temp_21   && r_temp_23 >= r_temp_ 12)?r_temp_23:'d0;
  21. r_temp_min_2 <= (r_temp_21 <= r_temp_22 && r_temp_21 <= r_temp_23)?r_temp_21:
  22. (r_temp_22 <= r_temp_21 && r_temp_22 <= r_temp_23)?r_temp_22:
  23. (r_temp_23 <= r_temp_21 && r_temp_23 <= r_temp_22)?r_temp_23:'d0;
  24. r_temp_max_3 <= (r_temp_31 >= r_temp_32 && r_temp_31 >= r_temp_33)?r_temp_31:
  25. (r_temp_32 >= r_temp_31 && r_temp_32 >= r_temp_33)?r_temp_32:(r_temp_33 >= r_temp_31 && r_temp_33 >= r_temp_32)?r_temp_33:'d0;
  26. r_temp_med_3 <= (r_temp_31 >= r_temp_32 && r_temp_31 <= r_temp_33 || r_temp_31 <= r_temp_32 && r_temp_31 >= r_temp_33)?r_temp_31:
  27. (r_temp_32   >=   r_temp_31   &&   r_temp_32   <=   r_temp_33    ||   r_temp_32   <=   r_temp_31   && r_temp_32 >= r_temp_33)?r_temp_32:
  28. (r_temp_33   >=   r_temp_31   &&   r_temp_33   <=   r_temp_32    ||   r_temp_33   <=   r_temp_31   && r_temp_33 >= r_temp_32)?r_temp_33:'d0;
  29. r_temp_min_3 <= (r_temp_31 <= r_temp_32 && r_temp_31 <= r_temp_33)?r_temp_31:
  30. (r_temp_32 <= r_temp_31 && r_temp_32 <= r_temp_33)?r_temp_32:
  31. (r_temp_33 <= r_temp_31 && r_temp_33 <= r_temp_32)?r_temp_33:'d0;
  32. end
  33. end

  34. always@(posedge i_clk ornegedge i_rst_n) begin
  35. if(!i_rst_n) begin
  36. r_temp_max_min <= 'd0;
  37. r_temp_med_med <= 'd0; r_temp_min_max <= 'd0;
  38. end else
  39. begin
  40. r_temp_max_min <= (r_temp_max_ 1 <= r_temp_max_2 && r_temp_max_ 1 <= r_temp_max_3)?r_temp_max_ 1:
  41. (r_temp_max_2 <= r_temp_max_ 1 && r_temp_max_2 <= r_temp_max_3)?r_temp_max_2:
  42. (r_temp_max_3 <= r_temp_max_ 1 && r_temp_max_3 <= r_temp_max_2)?r_temp_max_3:'d0;
  43. r_temp_med_med  <=  (r_temp_med_ 1  >=  r_temp_med_2  &&  r_temp_med_ 1  <=  r_temp_med_3  ||  r_temp_med_ 1  <= r_temp_med_2 && r_temp_med_ 1 >= r_temp_med_3)?r_temp_med_ 1:
  44. (r_temp_med_2  >=  r_temp_med_ 1  &&  r_temp_med_2  <=  r_temp_med_3   ||  r_temp_med_2   <= r_temp_med_ 1 && r_temp_med_2 >= r_temp_med_3)?r_temp_med_2:
  45. (r_temp_med_3  >=  r_temp_med_ 1  &&  r_temp_med_3  <=  r_temp_med_2   ||  r_temp_med_3   <= r_temp_med_ 1 && r_temp_med_3 >= r_temp_med_2)?r_temp_med_3:'d0;
  46. r_temp_min_max <= (r_temp_min_ 1 >= r_temp_min_2 && r_temp_min_ 1 >= r_temp_min_3)?r_temp_min_ 1:  (r_temp_min_2 >= r_temp_min_ 1 && r_temp_min_2 >= r_temp_min_3)?r_temp_min_2:
  47. (r_temp_min_3 >= r_temp_min_ 1 && r_temp_min_3 >= r_temp_min_2)?r_temp_min_3:'d0;
  48. end
  49. end

  50. always@(posedge i_clk ornegedge i_rst_n) begin
  51. if(!i_rst_n) begin
  52. g_temp_max_ 1 <= 'd0;    g_temp_med_ 1 <= 'd0; g_temp_min_ 1 <= 'd0;  g_temp_max_2 <= 'd0;
  53. g_temp_med_2 <= 'd0; g_temp_min_2 <= 'd0;  g_temp_max_3 <= 'd0; g_temp_med_3 <= 'd0; g_temp_min_3 <= 'd0;
  54. end else
  55. begin
  56. g_temp_max_ 1 <= (g_temp_ 11 >= g_temp_ 12 && g_temp_ 11 >= g_temp_ 13)? g_temp_ 11:
  57. (g_temp_ 12 >= g_temp_ 11 && g_temp_ 12 >= g_temp_ 13)?g_temp_ 12:
  58. (g_temp_ 13 >= g_temp_ 11 && g_temp_ 13 >= g_temp_ 12)?g_temp_ 13:'d0;
  59. g_temp_med_ 1 <= (g_temp_ 11 >= g_temp_ 12 && g_temp_ 11 <= g_temp_ 13 || g_temp_ 11 <= g_temp_ 12 && g_temp_ 11 >= g_temp_ 13)? g_temp_ 11:
  60. (g_temp_ 12  >=  g_temp_ 11   &&  g_temp_ 12  <=   g_temp_ 13   ||   g_temp_ 12   <=   g_temp_ 11   && g_temp_ 12 >= g_temp_ 13)? g_temp_ 12:
  61. (g_temp_ 13  >=  g_temp_ 11   &&  g_temp_ 13  <=   g_temp_ 12   ||   g_temp_ 13   <=   g_temp_ 11   && g_temp_ 13 >= g_temp_ 12)? g_temp_ 13:'d0;
  62. g_temp_min_ 1 <= (g_temp_ 11 <= g_temp_ 12 && g_temp_ 11 <= g_temp_ 13)? g_temp_ 11:
  63. (g_temp_ 12 <= g_temp_ 11 && g_temp_ 12 <= g_temp_ 13)?g_temp_ 12:
  64. (g_temp_ 13 <= g_temp_ 11 && g_temp_ 13 <= g_temp_ 12)?g_temp_ 13:'d0;
  65. g_temp_max_2 <= (g_temp_21 >= g_temp_22 && g_temp_21 >= g_temp_23)? g_temp_21:
  66. (g_temp_22 >= g_temp_21 && g_temp_22 >= g_temp_23)?g_temp_22:
  67. (g_temp_23 >= g_temp_21 && g_temp_23 >= g_temp_22)?g_temp_23:'d0;
  68. g_temp_med_2 <= (g_temp_21 >= g_temp_22 && g_temp_21 <= g_temp_23 || g_temp_21 <= g_temp_22 && g_temp_21 >= g_temp_23)? g_temp_21:
  69. (g_temp_22  >=  g_temp_21  &&  g_temp_22  <=  g_temp_23   ||   g_temp_22  <=  g_temp_21  && g_temp_22 >= g_temp_23)? g_temp_22:
  70. (g_temp_23  >=  g_temp_21  &&  g_temp_23  <=  g_temp_22   ||   g_temp_23  <=  g_temp_21  && g_temp_23 >= g_temp_22)? g_temp_23:'d0;
  71. g_temp_min_2 <= (g_temp_21 <= g_temp_22 && g_temp_21 <= g_temp_23)? g_temp_21:
  72. (g_temp_22 <= g_temp_21 && g_temp_22 <= g_temp_23)?g_temp_22:
  73. (g_temp_23 <= g_temp_21 && g_temp_23 <= g_temp_22)?g_temp_23:'d0;
  74. g_temp_max_3 <= (g_temp_31 >= g_temp_32 && g_temp_31 >= g_temp_33)? g_temp_31:
  75. (g_temp_32 >= g_temp_31 && g_temp_32 >= g_temp_33)?g_temp_32:
  76. (g_temp_33 >= g_temp_31 && g_temp_33 >= g_temp_32)?g_temp_33:'d0;
  77. g_temp_med_3 <= (g_temp_31 >= g_temp_32 && g_temp_31 <= g_temp_33 || g_temp_31 <= g_temp_32 && g_temp_31 >= g_temp_33)? g_temp_31:
  78. (g_temp_32  >=  g_temp_31  &&  g_temp_32  <=  g_temp_33   ||   g_temp_32  <=  g_temp_31  && g_temp_32 >= g_temp_33)? g_temp_32:
  79. (g_temp_33  >=  g_temp_31  &&  g_temp_33  <=  g_temp_32   ||   g_temp_33  <=  g_temp_31  && g_temp_33 >= g_temp_32)? g_temp_33:'d0;
  80. g_temp_min_3 <= (g_temp_31 <= g_temp_32 && g_temp_31 <= g_temp_33)? g_temp_31:
  81. (g_temp_32 <= g_temp_31 && g_temp_32 <= g_temp_33)?g_temp_32:
  82. (g_temp_33 <= g_temp_31 && g_temp_33 <= g_temp_32)?g_temp_33:'d0;
  83. end
  84. end
  85. always@(posedge i_clk ornegedge i_rst_n) begin
  86. if(!i_rst_n) begin
  87. g_temp_max_min <= 'd0;
  88. g_temp_med_med <= 'd0; g_temp_min_max <= 'd0;
  89. end else
  90. begin
  91. g_temp_max_min <= (g_temp_max_ 1 <= g_temp_max_2 && g_temp_max_ 1 <= g_temp_max_3)?g_temp_max_ 1:
  92. (g_temp_max_2 <= g_temp_max_ 1 && g_temp_max_2 <= g_temp_max_3)?g_temp_max_2:
  93. (g_temp_max_3 <= g_temp_max_ 1 && g_temp_max_3 <= g_temp_max_2)?g_temp_max_3:'d0;
  94. g_temp_med_med  <=  (g_temp_med_ 1  >=  g_temp_med_2  &&  g_temp_med_ 1  <=  g_temp_med_3  ||  g_temp_med_ 1  <= g_temp_med_2 && g_temp_med_ 1 >= g_temp_med_3)?g_temp_med_ 1:
  95. (g_temp_med_2  >=  g_temp_med_ 1   &&  g_temp_med_2  <=   g_temp_med_3  ||  g_temp_med_2  <= g_temp_med_ 1 && g_temp_med_2 >= g_temp_med_3)?g_temp_med_2:
  96. (g_temp_med_3  >=  g_temp_med_ 1   &&  g_temp_med_3  <=   g_temp_med_2  ||  g_temp_med_3  <= g_temp_med_ 1 && g_temp_med_3 >= g_temp_med_2)?g_temp_med_3:'d0;
  97. g_temp_min_max <= (g_temp_min_ 1 >= g_temp_min_2 && g_temp_min_ 1 >= g_temp_min_3)? g_temp_min_ 1:
  98. (g_temp_min_2 >= g_temp_min_ 1 && g_temp_min_2 >= g_temp_min_3)? g_temp_min_2:
  99. (g_temp_min_3 >= g_temp_min_ 1 && g_temp_min_3 >= g_temp_min_2)? g_temp_min_3:'d0;
  100. end
  101. end

  102. always@(posedge i_clk ornegedge i_rst_n) begin
  103. if(!i_rst_n) begin
  104. b_temp_max_ 1 <= 'd0;    b_temp_med_ 1 <= 'd0; b_temp_min_ 1 <= 'd0;  b_temp_max_2 <= 'd0; b_temp_med_2 <= 'd0; b_temp_min_2 <= 'd0;  b_temp_max_3 <= 'd0; b_temp_med_3 <= 'd0; b_temp_min_3 <= 'd0;
  105. end else
  106. begin
  107. b_temp_max_ 1 <= (b_temp_ 11 >= b_temp_ 12 && b_temp_ 11 >= b_temp_ 13)?b_temp_ 11:
  108. (b_temp_ 12 >= b_temp_ 11 && b_temp_ 12 >= b_temp_ 13)?b_temp_ 12:
  109. (b_temp_ 13 >= b_temp_ 11 && b_temp_ 13 >= b_temp_ 12)?b_temp_ 13:'d0;
  110. b_temp_med_ 1 <= (b_temp_ 11 >= b_temp_ 12 && b_temp_ 11 <= b_temp_ 13 || b_temp_ 11 <= b_temp_ 12 && b_temp_ 11 >=b_temp_ 13)?b_temp_ 11:
  111. (b_temp_ 12  >=  b_temp_ 11   &&  b_temp_ 12  <=  b_temp_ 13   ||   b_temp_ 12  <=  b_temp_ 11  && b_temp_ 12 >= b_temp_ 13)?b_temp_ 12:
  112. (b_temp_ 13  >=  b_temp_ 11   &&  b_temp_ 13  <=  b_temp_ 12   ||   b_temp_ 13  <=  b_temp_ 11  && b_temp_ 13 >= b_temp_ 12)?b_temp_ 13:'d0;
  113. b_temp_min_ 1 <= (b_temp_ 11 <= b_temp_ 12 && b_temp_ 11 <= b_temp_ 13)?b_temp_ 11:
  114. (b_temp_ 12 <= b_temp_ 11 && b_temp_ 12 <= b_temp_ 13)?b_temp_ 12:
  115. (b_temp_ 13 <= b_temp_ 11 && b_temp_ 13 <= b_temp_ 12)?b_temp_ 13:'d0;
  116. b_temp_max_2 <= (b_temp_21 >= b_temp_22 && b_temp_21 >= b_temp_23)?b_temp_21:
  117. (b_temp_22 >= b_temp_21 && b_temp_22 >= b_temp_23)?b_temp_22:
  118. (b_temp_23 >= b_temp_21 && b_temp_23 >= b_temp_22)?b_temp_23:'d0;
  119. b_temp_med_2 <= (b_temp_21 >= b_temp_22 && b_temp_21 <= b_temp_23 || b_temp_21 <= b_temp_22 && b_temp_21 >= b_temp_23)?b_temp_21:
  120. (b_temp_22  >=  b_temp_21  &&  b_temp_22  <=  b_temp_23   ||  b_temp_22  <=  b_temp_21  && b_temp_22 >= b_temp_23)?b_temp_22:
  121. (b_temp_23  >=  b_temp_21  &&  b_temp_23  <=  b_temp_22   ||  b_temp_23  <=  b_temp_21  && b_temp_23 >= b_temp_22)?b_temp_23:'d0;
  122. b_temp_min_2 <= (b_temp_21 <= b_temp_22 && b_temp_21 <= b_temp_23)?b_temp_21:
  123. (b_temp_22 <= b_temp_21 && b_temp_22 <= b_temp_23)?b_temp_22:
  124. (b_temp_23 <= b_temp_21 && b_temp_23 <= b_temp_22)?b_temp_23:'d0;
  125. b_temp_max_3 <= (b_temp_31 >= b_temp_32 && b_temp_31 >= b_temp_33)?b_temp_31:
  126. (b_temp_32 >= b_temp_31 && b_temp_32 >= b_temp_33)?b_temp_32:
  127. (b_temp_33 >= b_temp_31 && b_temp_33 >= b_temp_32)?b_temp_33:'d0;
  128. b_temp_med_3 <= (b_temp_31 >= b_temp_32 && b_temp_31 <= b_temp_33 || b_temp_31 <= b_temp_32 && b_temp_31 >= b_temp_33)?b_temp_31:
  129. (b_temp_32  >=  b_temp_31  &&  b_temp_32  <=  b_temp_33   ||  b_temp_32  <=  b_temp_31  && b_temp_32 >= b_temp_33)?b_temp_32:
  130. (b_temp_33  >=  b_temp_31  &&  b_temp_33  <=  b_temp_32   ||  b_temp_33  <=  b_temp_31  && b_temp_33 >= b_temp_32)?b_temp_33:'d0;
  131. b_temp_min_3 <= (b_temp_31 <= b_temp_32 && b_temp_31 <= b_temp_33)?b_temp_31:
  132. (b_temp_32 <= b_temp_31 && b_temp_32 <= b_temp_33)?b_temp_32:
  133. (b_temp_33 <= b_temp_31 && b_temp_33 <= b_temp_32)?b_temp_33:'d0;
  134. end
  135. end

  136. always@(posedge i_clk ornegedge i_rst_n) begin
  137. if(!i_rst_n) begin
  138. b_temp_max_min <= 'd0;
  139. b_temp_med_med <= 'd0; b_temp_min_max <= 'd0;
  140. end else
  141. begin
  142. b_temp_max_min <= (b_temp_max_ 1 <= b_temp_max_2 && b_temp_max_ 1 <= b_temp_max_3)?b_temp_max_ 1:(b_temp_max_2 <= b_temp_max_ 1 && b_temp_max_2 <= b_temp_max_3)?b_temp_max_2:
  143. (b_temp_max_3 <= b_temp_max_ 1 && b_temp_max_3 <= b_temp_max_2)?b_temp_max_3:'d0;
  144. b_temp_med_med  <=  (b_temp_med_ 1  >=  b_temp_med_2  &&  b_temp_med_ 1  <=  b_temp_med_3  ||  b_temp_med_ 1  <= b_temp_med_2 && b_temp_med_ 1 >= b_temp_med_3)?b_temp_med_ 1:
  145. (b_temp_med_2  >=  b_temp_med_ 1  &&  b_temp_med_2  <=  b_temp_med_3   ||  b_temp_med_2  <= b_temp_med_ 1 && b_temp_med_2 >= b_temp_med_3)?b_temp_med_2:
  146. (b_temp_med_3  >=  b_temp_med_ 1  &&  b_temp_med_3  <=  b_temp_med_2   ||  b_temp_med_3  <= b_temp_med_ 1 && b_temp_med_3 >= b_temp_med_2)?b_temp_med_3:'d0;
  147. b_temp_min_max <= (b_temp_min_ 1 >= b_temp_min_2 && b_temp_min_ 1 >= b_temp_min_3)?b_temp_min_ 1: (b_temp_min_2 >= b_temp_min_ 1 && b_temp_min_2 >= b_temp_min_3)?b_temp_min_2:
  148. (b_temp_min_3 >= b_temp_min_ 1 && b_temp_min_3 >= b_temp_min_2)?b_temp_min_3:'d0;
  149. end
  150. end

  151. always@(posedge i_clk ornegedge i_rst_n) begin
  152. if(!i_rst_n) begin
  153. r_med <= 'd0;
  154. g_med <= 'd0; b_med <= 'd0;
  155. end else
  156. Begin//各元素分量的中值
  157. r_med  <=  (r_temp_max_min  >=  r_temp_med_med   &&  r_temp_max_min   <=  r_temp_min_max   ||  r_temp_max_min   <= r_temp_med_med && r_temp_max_min >= r_temp_min_max)?r_temp_max_min:
  158. (r_temp_med_med  >=  r_temp_max_min  &&  r_temp_med_med  <=  r_temp_min_max   ||  r_temp_med_med  <= r_temp_max_min && r_temp_med_med >= r_temp_min_max)?r_temp_med_med:
  159. (r_temp_min_max  >=  r_temp_max_min   &&  r_temp_min_max  <=  r_temp_med_med   ||  r_temp_min_max  <= r_temp_max_min && r_temp_min_max >= r_temp_med_med)?r_temp_min_max:'d0;
  160. g_med <=  (g_temp_max_min >=  g_temp_med_med  &&  g_temp_max_min  <=  g_temp_min_max  ||  g_temp_max_min  <= g_temp_med_med && g_temp_max_min >= g_temp_min_max)? g_temp_max_min:
  161. (g_temp_med_med >= g_temp_max_min && g_temp_med_med <= g_temp_min_max  ||  g_temp_med_med  <= g_temp_max_min && g_temp_med_med >= g_temp_min_max)? g_temp_med_med:
  162. (g_temp_min_max  >=  g_temp_max_min  &&  g_temp_min_max  <=  g_temp_med_med  ||  g_temp_min_max  <= g_temp_max_min && g_temp_min_max >= g_temp_med_med)? g_temp_min_max:'d0;
  163. b_med <=  (b_temp_max_min >= b_temp_med_med  && b_temp_max_min  <= b_temp_min_max  ||  b_temp_max_min <= b_temp_med_med && b_temp_max_min >= b_temp_min_max)?b_temp_max_min:
  164. (b_temp_med_med >= b_temp_max_min && b_temp_med_med <= b_temp_min_max  || b_temp_med_med  <= b_temp_max_min && b_temp_med_med >= b_temp_min_max)?b_temp_med_med:
  165. (b_temp_min_max >= b_temp_max_min && b_temp_min_max <= b_temp_med_med  || b_temp_min_max <= b_temp_max_min && b_temp_min_max >= b_temp_med_med)?b_temp_min_max:'d0;
  166. end
  167. end
复制代码
2.3 工程结构分析
我们将图像算法的模块做成 IP 后,在vivado 中进行工程的搭建,工程结构如图所示:
cd52de6067114fe39800f720b74937f3.jpg
3 仿真及结果
3.1Matlab实验结果
f95ff0a521f84d1f911609fa68fed80a.jpg
由上图可知中值滤波对椒盐噪声有很好的滤波特性。但对高斯滤波性能较弱,原因是中值滤波对所有的像素点采用一致的处理,在滤除噪声的同时有可能改变真正像素点的值,引入误差,损坏图像的边缘和细节。

3.2Modelsim实验结果

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

6d810f48913a40c49127a6046f260dda.jpg
5 硬件连接
硬件连接如图所示:
d647ec57de9842a98cd4bf28e53a496f.jpg
6 上板实验结果
实验结果如图所示:
6f4e04b534a0422d8240115a08964f8b.jpg





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

本版积分规则