基於FPGA影像的鏡像

  • 2019 年 10 月 29 日
  • 筆記

幾何變換-鏡像

鏡像的目的是將影像進行翻轉,如圖1所示,美國懷俄明大提頓國家公園被水面鏡像。鏡像可以用前向映射實現,同時由於輸出坐標必然落在原先的影像區域內,所以不用進行區域判斷,屬於比較簡單的幾何變換。

圖1 美國懷俄明大提頓國家公園(水面鏡像)

1 原理

鏡像有兩種模式—水平鏡像和垂直鏡像,它的原理如式1所示,Q為輸出,I為輸入,x和y為輸入像素坐標,xt和yt為輸出像素坐標,width和height為影像寬度和高度。可見鏡像的本質是將輸入坐標和影像的寬度和高度做減法以得到輸出坐標,同時由於減法的結果必然小於被減數,故這實際上是單純的無符號數的減法。

實際應用中會出現三種情況—水平鏡像、垂直鏡像和全鏡像,所以需要一個模式選擇來確定模組的工作方式。

2 matlab實現

圖2 實驗原圖

Matlab實現水平、垂直、全鏡像源碼:

close all;

clear all;

clc;

I=imread('test.png');

[ROW COL DIM] = size(I);

Ih = uint8(zeros(ROW, COL,DIM));%Horizontal mirroring

Iv = uint8(zeros(ROW, COL,DIM));%Vertical mirroring

Ihv = uint8(zeros(ROW, COL,DIM));

%水平鏡像

for i =1:ROW

for j=1:COL

for k=1:DIM

x = i;

y = COL-j+1;

z = k;

Ih(x,y,z) =I(i,j,k);

end

end

end

%垂直鏡像

for i =1:ROW

for j=1:COL

for k=1:DIM

x = ROW-i+1;

y = j;

z = k;

Iv(x,y,z) =I(i,j,k);

end

end

end

%水平垂直鏡像

for i =1:ROW

for j=1:COL

for k=1:DIM

x = ROW-i+1;

y = COL-j+1;

z = k;

Ihv(x,y,z)=I(i,j,k);

end

end

end

figure,

subplot(221),imshow(I);title('原圖');

subplot(222),imshow(Ih);title('水平鏡像');

subplot(223),imshow(Iv);title('垂直鏡像');

subplot(224),imshow(Ihv);title('水平垂直鏡像');

圖3 matlab實驗結果

3FPGA 實現

共有四種模式: Mode1: 原圖,

Mode2:全鏡像,

Mode3: 水平鏡像,

Mode4:垂直鏡像。

Verilog實現鏡像源碼:

  1. `timescale 1ns / 1ps
  2. module mirror#(
  3. parameter DW = 8,
  4. parameter IW = 1920,
  5. parameter IH = 1080,
  6. parameter MODE = 0 //0 1 2 3
  7. )
  8. (
  9. input pixelclk,
  10. input reset_n,
  11. input i_hsync,
  12. input i_vsync,
  13. input i_de,
  14. input [DW*3-1:0] din,
  15. input [11:0] hcount,//x
  16. input [11:0] vcount,//y
  17. output [11:0] hcount_t,//xt
  18. output [11:0] vcount_t,//yt
  19. output o_hsync,
  20. output o_vsync,
  21. output o_de,
  22. output [DW*3-1:0] dout
  23. );
  24. assign o_hsync = i_hsync;
  25. assign o_vsync = i_vsync;
  26. assign o_de = i_de;
  27. assign dout = din;
  28. assign hcount_t = (MODE == 0)?hcount:
  29. (MODE == 1)?(IW-1)-hcount:
  30. (MODE == 2)?(IW-1)-hcount:hcount;
  31. assign vcount_t = (MODE == 0)?vcount:
  32. (MODE == 1)?(IH-1)-vcount:
  33. (MODE == 2)?vcount:(IH-1)-vcount;
  34. endmodule

圖4 FPGA實現全鏡像

基於FPGA的車牌字元提取

一種MXN維的手寫字元識別演算法

基於HDMI的影片流輸入輸出實驗

一種簡單的基於FPGA車牌定位演算法的實現

基於FPGA的數字識別三