1.算法運行效果圖預(yù)覽
(完整程序運行后無水印)

將數(shù)據(jù)導(dǎo)入MATLAB,顯示圖像:

2.算法運行軟件版本
vivado2019.2,matlab2022a
3.部分核心程序
(完整版代碼包含詳細(xì)中文注釋和操作步驟視頻)
module test_image;
reg i_clk;
reg i_rst;
reg [7:0] Buffer [0:100000];
reg [7:0] II;
wire [7:0] o_Ith;
wire [7:0] o_Itv;
integer fids,idx=0,dat;
//D:\FPGA_Proj\FPGAtest\code_proj\project_1\project_1.srcs\sources_1
initial
begin
?????? fids= $fopen("D:\\code2\\code_proj\\data.bmp","rb");
?????? dat? = $fread(Buffer,fids);
?????? $fclose(fids);
end
initial
begin
i_clk=1;
i_rst=1;
#1000;
i_rst=0;
end
always #5 i_clk=~i_clk;
always@(posedge i_clk)
begin
?????? II<=Buffer[idx];
?????? idx<=idx+1;
end
tops tops_u(
.i_clk?????????? (i_clk),
.i_rst?????????? (i_rst),
.i_I???????????? (II),
.o_Ith?????????? (o_Ith),
.o_Itv?????????? (o_Itv)
);
integer fout1;
integer fout2;
initial begin
?fout1 =$fopen("SAVEDATA1.txt","w");
?fout2 =$fopen("SAVEDATA2.txt","w");
end
always @ (posedge i_clk)
?begin
???if(idx<=66614 & idx>=2)
?????? $fwrite(fout1,"%d\n",o_Ith);
?????? else
?????? $fwrite(fout1,"%d\n",0);
???if(idx<=66614 & idx>=2)
?????? $fwrite(fout2,"%d\n",o_Itv);
?????? else
?????? $fwrite(fout2,"%d\n",0);
end
endmodule
4.算法理論概述
? ? ? ?在圖像處理領(lǐng)域,圖像退化是一個常見的問題,而運動模糊是其中一種典型的退化形式。運動模糊通常是由于相機(jī)與物體之間的相對運動而產(chǎn)生的,會導(dǎo)致圖像變得模糊不清?;?FPGA(現(xiàn)場可編程門陣列)實現(xiàn)圖像退化算法具有實時性高、并行處理能力強(qiáng)等優(yōu)點。


算法流程
橫向運動模糊的實現(xiàn)可以通過對圖像的每一行進(jìn)行一維卷積來完成。具體步驟如下:
1.讀取圖像數(shù)據(jù):從圖像存儲器中逐行讀取圖像數(shù)據(jù)。
2.卷積操作:對每一行圖像數(shù)據(jù)進(jìn)行一維卷積,卷積核為橫向運動模糊的點擴(kuò)散函數(shù)。
3.存儲結(jié)果:將卷積后的結(jié)果存儲到另一個圖像存儲器中。
縱向運動模糊的實現(xiàn)可以通過對圖像的每一列進(jìn)行一維卷積來完成。具體步驟如下:
1.讀取圖像數(shù)據(jù):從圖像存儲器中逐列讀取圖像數(shù)據(jù)。
2.卷積操作:對每一列圖像數(shù)據(jù)進(jìn)行一維卷積,卷積核為縱向運動模糊的點擴(kuò)散函數(shù)。
3.存儲結(jié)果:將卷積后的結(jié)果存儲到另一個圖像存儲器中。