中值滤波去除噪点项目设计书

这是毕业第一年的时候写的一个项目程序,贡献出来,供大家学习,交流,不做商用。

这是fpga做的图像中值滤波,图像的分辨率是256*256。以下是详细东西,有这个算法的详细思考过程,和程序,还有做出来的效果。效果是根据fpga算法用matlab仿真出来的。





以下是项目涉及的程序:


/*
	求最小值中的最大值。
*/
`timescale 1ns/1ps

module max_of_3(
	//input
	vclk,
	vsync,
	hsync,
	vden,
	min_x1,
	min_x2,
	min_x3,
	//output
	vsync_out,
	hsync_out,
	vden_out,
	max_of_min
);
input vclk;
input vsync,hsync,vden;
input [23:0] min_x1,min_x2,min_x3;
output [23:0] max_of_min;
output vsync_out,hsync_out,vden_out;
reg [23:0] max_of_min=24'h0;
reg vsync_reg,hsync_reg,vden_reg;

always@(posedge vclk)
begin
	if(min_x1>min_x2)
		begin
			if(min_x3>min_x1)
				begin
					max_of_min<=min_x3;
				end
			else
				begin
					max_of_min<=min_x1;
				end
		end	
		else
			begin
				if(min_x3>min_x2)
					begin
						max_of_min<=min_x3;
					end
				else 
					begin
						max_of_min<=min_x2;
					end
			end
end
/****Delay Signals************************/
always @ (posedge vclk)
begin
	vsync_reg <= vsync;
	hsync_reg <= hsync;
	vden_reg  <= vden;
end

assign vsync_out = vsync_reg;
assign hsync_out = hsync_reg;
assign vden_out  = vden_reg;
/****Delay Signals************************/
endmodule


/*	
	求中值的中值。
*/
`timescale 1ns/1ps

module mid_of_3(
	//input
	vclk,
	vsync,
	hsync,
	vden,
	mid_x1,
	mid_x2,
	mid_x3,
	//output
	vsync_out,
	hsync_out,
	vden_out,
	mid_of_mid
);
input vclk;
input vsync,hsync,vden;
input [23:0] mid_x1,mid_x2,mid_x3;
output [23:0] mid_of_mid;
output vsync_out,hsync_out,vden_out;

reg [23:0] mid_of_mid=24'h0;
reg vsync_reg,hsync_reg,vden_reg;

always@(posedge vclk)
begin
	if(mid_x1<mid_x2)
		begin
			if(mid_x3<mid_x1)
				begin
					mid_of_mid<=mid_x1;
				end
			else if(mid_x3<mid_x2)
				begin
					mid_of_mid<=mid_x3;
				end
			else
				begin
					mid_of_mid<=mid_x2;
				end
		end	
		else
			begin
				if(mid_x3<mid_x2)
					begin
						mid_of_mid<=mid_x2;
					end
				else if(mid_x3<mid_x1)
					begin
						mid_of_mid<=mid_x3;
					end
				else
					begin
						mid_of_mid<=mid_x1;
					end
			end

end
/****Delay Signals************************/
always @ (posedge vclk)
begin
	vsync_reg <= vsync;
	hsync_reg <= hsync;
	vden_reg  <= vden;
end

assign vsync_out = vsync_reg;
assign hsync_out = hsync_reg;
assign vden_out  = vden_reg;
/****Delay Signals************************/
endmodule

/*
	求最大值中的最小值。
*/
`timescale 1ns/1ps

module min_of_3(
	//input
	vclk,
	vsync,
	hsync,
	vden,
	max_x1,
	max_x2,
	max_x3,
	//output
	vsync_out,
	hsync_out,
	vden_out,
	min_of_max
);
input vclk;
input vsync,hsync,vden;
input [23:0] max_x1,max_x2,max_x3;
output [23:0] min_of_max;
output vsync_out,hsync_out,vden_out;
reg [23:0] min_of_max=24'h0;
reg vsync_reg,hsync_reg,vden_reg;

always@(posedge vclk)
begin
	if(max_x1<max_x2)
		begin
			if(max_x3<max_x1)
				begin
					min_of_max<=max_x3;
				end
			else
				begin
					min_of_max<=max_x1;
				end
		end	
		else
			begin
				if(max_x3<max_x2)
				begin
					min_of_max<=max_x3;
				end
				else 
				begin
					min_of_max<=max_x2;
				end
			end
	
end

/****Delay Signals************************/
always @ (posedge vclk)
begin
	vsync_reg <= vsync;
	hsync_reg <= hsync;
	vden_reg  <= vden;
end

assign vsync_out = vsync_reg;
assign hsync_out = hsync_reg;
assign vden_out  = vden_reg;
/****Delay Signals************************/

endmodule

/*
	求最大值中的最小值。
*/
`timescale 1ns/1ps

module min_of_3(
	//input
	vclk,
	vsync,
	hsync,
	vden,
	max_x1,
	max_x2,
	max_x3,
	//output
	vsync_out,
	hsync_out,
	vden_out,
	min_of_max
);
input vclk;
input vsync,hsync,vden;
input [23:0] max_x1,max_x2,max_x3;
output [23:0] min_of_max;
output vsync_out,hsync_out,vden_out;
reg [23:0] min_of_max=24'h0;
reg vsync_reg,hsync_reg,vden_reg;

always@(posedge vclk)
begin
	if(max_x1<max_x2)
		begin
			if(max_x3<max_x1)
				begin
					min_of_max<=max_x3;
				end
			else
				begin
					min_of_max<=max_x1;
				end
		end	
		else
			begin
				if(max_x3<max_x2)
				begin
					min_of_max<=max_x3;
				end
				else 
				begin
					min_of_max<=max_x2;
				end
			end
	
end

/****Delay Signals************************/
always @ (posedge vclk)
begin
	vsync_reg <= vsync;
	hsync_reg <= hsync;
	vden_reg  <= vden;
end

assign vsync_out = vsync_reg;
assign hsync_out = hsync_reg;
assign vden_out  = vden_reg;
/****Delay Signals************************/

endmodule

/*	
	求中值的中值。
*/
`timescale 1ns/1ps

module mid_of_3(
	//input
	vclk,
	vsync,
	hsync,
	vden,
	mid_x1,
	mid_x2,
	mid_x3,
	//output
	vsync_out,
	hsync_out,
	vden_out,
	mid_of_mid
);
input vclk;
input vsync,hsyn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值