1背景知識
差分圖像在許多領(lǐng)域得到了廣泛的應(yīng)用,比如:視頻壓縮,生物醫(yī)學(xué)診斷,天文學(xué),遙感,人臉識別等。
2 matlab仿真
MATLAB源碼:
Main.m
I = imread('flower.bmp'); figure, imshow(I);
I_gray = rgb2gray(I);figure,imshow(I_gray);
Id = mipcentraldiff(I_gray,'dx'); figure, imshow(Id);
Mipcentraldiff.m
function dimg = mipcentraldiff(img,direction)
% MIPCENTRALDIFF Finite difference calculations
%
% DIMG = MIPCENTRALDIFF(IMG,DIRECTION)
%
% Calculates the central-difference for?a given direction
% IMG : input image
% DIRECTION : 'dx'?or 'dy'
% DIMG : resultant image
%
% See also MIPFORWARDDIFF MIPBACKWARDDIFF MIPSECONDDERIV
% MIPSECONDPARTIALDERIV
% Omer Demirkaya, Musa Asyali, Prasana Shaoo, ...
% Medical Image Processing Toolbox
img = padarray(img,[1 1],'symmetric','both');
[row,col] = size(img);
dimg = zeros(row,col);
switch(direction)
case'dx',
dimg(:,2:col-1) = (img(:,3:col)-img(:,1:col-2))/2;
case'dy',
dimg(2:row-1,:) = (img(3:row,:)-img(1:row-2,:))/2;
otherwise,
disp('Direction is unknown');
end
dimg = dimg(2:end-1,2:end-1);
仿真結(jié)果:
圖1 RGB原圖
圖2 gray
圖3 central_diff
3 FPGA設(shè)計
圖4 基于串口傳圖的中心差分
如圖4所示,我們將RGB565格式轉(zhuǎn)化為Ycbcr格式,Y通道進入中心差分模塊,完成中心差分算法。
FPGA源碼:
*/
////////////////////////////////////////////////////////////////
wire [15:0] rgb;
wire hs;
wire vs;
wire de;
wire o_hs;
wire o_vs;
wire o_de;
wire[7 : 0]o_y_8b;
wire[7 : 0]o_cb_8b;
wire[7 : 0]o_cr_8b;
//assign TFT_rgb = {o_y_8b[7:3],o_y_8b[7:2],o_y_8b[7:3]}; //Y
//assign TFT_rgb = {o_cb_8b[7:3],o_cb_8b[7:2],o_cb_8b[7:3]}; //cb
//assign TFT_rgb = {o_cr_8b[7:3],o_cr_8b[7:2],o_cr_8b[7:3]}; //cr
//////////////////////////////////////////////////////////////
tft_ctrl tft_ctrl(
.Clk9M(clk9M),//系統(tǒng)輸入時鐘9MHZ
.Rst_n(Rst_n),//復(fù)位輸入,低電平復(fù)位
.data_in({Rd_data[7:0],Rd_data[15:8]}),//待顯示數(shù)據(jù)
.hcount(),//TFT行掃描計數(shù)器
.vcount(),//TFT場掃描計數(shù)器
.TFT_RGB(rgb),//TFT數(shù)據(jù)輸出
.TFT_HS(hs),//TFT行同步信號
.TFT_VS(vs),//TFT場同步信號
.TFT_CLK(TFT_clk),//TFT像素時鐘
.TFT_DE(de),//TFT數(shù)據(jù)使能
.TFT_begin(tft_begin),
.TFT_PWM(TFT_pwm)//TFT背光控制
);
rgb_to_ycbcr rgb_to_ycbcr_inst(
.clk(TFT_clk),
.i_r_8b({rgb[15:11],3'b0}),
.i_g_8b({rgb[10:5],2'b0}),
.i_b_8b({rgb[4:0],3'b0}),
.i_h_sync(hs),
.i_v_sync(vs),
.i_data_en(de),
.o_y_8b(o_y_8b),
.o_cb_8b(o_cb_8b),
.o_cr_8b(o_cr_8b),
.o_h_sync(o_hs),
.o_v_sync(o_vs),
.o_data_en(o_de)
);
reg [7:0] diff_data;
reg [7:0] o_y_8b_r0;
reg [7:0] o_y_8b_r1;
reg [7:0] o_y_8b_r2;
reg hs0;
reg hs1;
reg hs2;
reg vs0;
reg vs1;
reg vs2;
reg de0;
reg de1;
reg de2;
always @(posedge TFT_clk or negedge Rst_n) begin
if(!Rst_n) begin
hs0 <= 0;
hs1 <= 0;
hs2 <= 0;
vs0 <= 0;
vs1 <= 0;
vs2 <= 0;
de0 <= 0;
de1 <= 0;
de2 <= 0;
o_y_8b_r0 <= 0;
o_y_8b_r1 <= 0;
o_y_8b_r2 <= 0;
end
else begin
hs0 <= o_hs;
hs1 <= hs0;
hs2 <= hs1;
vs0 <= o_vs;
vs1 <= vs0;
vs2 <= vs1;
de0 <= o_de;
de1 <= de0;
de2 <= de1;
o_y_8b_r0 <= o_y_8b;
o_y_8b_r1 <= o_y_8b_r0;
o_y_8b_r2 <= o_y_8b_r1;
end
end
always @(posedge TFT_clk or negedge Rst_n) begin
if(!Rst_n)
diff_data <= 0;
else if(de2)
diff_data <= (o_y_8b_r2 - o_y_8b_r0) >>1;
else
diff_data <= diff_data;
end
assign TFT_rgb = {diff_data[7:3],diff_data[7:2],diff_data[7:3]};
assign TFT_de = de1;
assign TFT_hs = hs1;
assign TFT_vs = vs1;
Endmodule
結(jié)果展示:
圖5 FPGA中心差分結(jié)果
如圖5所示,由于手機拍攝原因,圖片不是很清晰,但基本結(jié)果一致,實驗成功。我們將把中心差分模塊移植到基于ov5640的實時圖像采集系統(tǒng)完成rgb三通道的彩色輸出。
圖6 基于ov5640的r/g/b通道彩色實時輸出中心差分
實驗結(jié)果成功,部分帶有彩色。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21729瀏覽量
602997
發(fā)布評論請先 登錄
相關(guān)推薦
評論