时间:2024-07-24 来源:网络搜集 关于我们 0
1)均值滤波器概述
用一个图像区域的各个像素的平均值来代替原图像的各个像素值,主要作用是减小锐度,减小噪声。 均值滤波一般出现在图像处理的预处理步骤, 预处理后,根据噪声来源,例如针对椒盐噪声做中值滤波处理,针对高斯噪声做高斯滤波处理 后续可能继续做边缘提取等复杂操作处理。 2)均值滤波器设计设计一个滤波器可以理解成设计一个响应函数g(x,y)=Σi=-rrΣj=-rr I(x+i,y+j)) / (2r+1)2 数学公式很好理解,就是求一个窗口的所有像素灰度值之后后再除以整个窗口的面积也就是像素点个数,求出平均值; 均值滤波的方法将数据存储成3x3的矩阵,然后求这个矩阵。在图像上对目标像素给一个模板, 该模板包括了其周围的临近像素(以目标象素为中心的周围 8 个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。always @(posedge clk or negedge rst_n)begin
3 if(rst_n==1b0)begin 4 {p_11,p_12,p_13} <= {5b0,5b0,5b0} ; 5 {p_21,p_22,p_23} <= {15b0,15b0,15b0}; 6 {p_31,p_32,p_33} <= {15b0,15b0,15b0}; 7end
8 elsebegin
9 if(per_href_ff0==1&&flag_do==1)begin
10 {p_11,p_12,p_13}<={p_12,p_13,row_1};
11 {p_21,p_22,p_23}<={p_22,p_23,row_2};
12 {p_31,p_32,p_33}<={p_32,p_33,row_3};
13end
14 elsebegin
15 {p_11,p_12,p_13}<={5b0,5b0,5b0};16 {p_21,p_22,p_23}<={5b0,5b0,5b0}17 {p_31,p_32,p_33}<={5b0,5b0,5b0}18end
19end
20end
212223always @(posedge clk or negedge rst_n)begin
24 if(rst_n==1b0)begin25 mean_value_add1<=0;
26 mean_value_add2<=0;
27 mean_value_add3<=0;
28end
29 else if(per_href_ff1)begin
30 mean_value_add1<=p_11+p_12+p_13;
31 mean_value_add2<=p_21+ 0 +p_23;
32 mean_value_add3<=p_31+p_32+p_33;
33end
34end
3536 wire [8:0]mean_value;//8位数之和37 wire [5:0]fin_y_data; //平均数,除以8,相当于左移三位。3839 assign mean_value=mean_value_add1+mean_value_add2+mean_value_add3;
40 assign fin_y_data=mean_value[8:3];View Code 3)sobel算子| -1 0 +1 |
Gx= | -2 0 +2 |
| -1 0 +1 |
| -1 -2 -1 |
Gy= | 0 0 0 |
| +1 +2 +1 | 包括X和Y两个方向的两套3X3矩阵,使其分别和图像的X和Y方向进行卷积计算(矩阵的卷积计算即将所有元素做乘加计算); 两个方向的卷积结果求平方根计算; 计算结果如果大于阈值则等于0xffff,如果小于阈值则等于0; 最终输出则是图像的边缘。 参考代码如下:由于算子简单以及有正负区分,因此需要做正值和负值分别计算后再进行相减计算。// | -1 0 +1 |
//Gx= | -2 0 +2 |
// | -1 0 +1 |
//// | -1 -2 -1 |
//Gy= | 0 0 0 |
// | +1 +2 +1 | reg [8:0] p_x_data ,p_y_data ; // x 和 y 的正值之和reg [8:0] n_x_data ,n_y_data ; // x 和 y 的负值之和reg [8:0] gx_data ,gy_data ; //最终结果always @(posedge clk or negedge rst_n)begin
if(rst_n==1b0)begin p_x_data <=0;
n_x_data <=0;
gx_data <=0;
end
else if(per_href_ff1==1) begin
p_x_data <= p_13 + (p_23<<1) +p_33 ;
n_x_data <= p_11 + (p_12<<1 )+p_13 ;
gx_data <= (p_x_data >=n_x_data)? p_x_data - n_x_data : n_x_data -p_x_data ;
end
elsebegin
p_x_data <=0;
n_x_data <=0;
gx_data <=0;
end
end
always @(posedge clk or negedge rst_n)begin
if(rst_n==1b0)begin p_y_data <=0;
n_y_data <=0;
gy_data <=0;
end
else if(per_href_ff1==1) begin
p_y_data <= p_11 + (p_12<<1) +p_13 ;
n_y_data <= p_31 + (p_32<<1) +p_33 ;
gy_data <= (p_y_data >=n_y_data)? p_y_data - n_y_data : n_y_data -p_y_data ;
end
elsebegin
p_y_data <=0;
n_y_data <=0;
gy_data <=0;
end
end
//求平方和,调用ip核开平方reg [16:0] gxy; // Gx 与 Gy 的平方和always @(posedge clk or negedge rst_n)begin
if(rst_n==1b0)begin gxy<=0;
end
elsebegin
gxy <= gy_data* gy_data + gx_data*gx_data ;
end
end
wire [ 8:0] squart_out ;
altsquart u1_altsquart ( //例化开平方的ip核.radical (gxy),
.q (squart_out), //输出的结果.remainder()
);
//与阈值进行比较reg [15:0] post_y_data_r;
always @(posedge clk or negedge rst_n)begin
if(rst_n==1b0)begin post_y_data_r<=16h00;end
else if(squart_out>=threshold)
post_y_data_r <=16h00 ; else post_y_data_r<=16hffff ;endView Code5.非线性滤波器 非线性滤波器通常下是没有特定的转移函数,统计排序滤波器;欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!
点个在看你最好看