前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于FPGA图像的镜像

基于FPGA图像的镜像

作者头像
FPGA开源工作室
发布2019-10-29 11:54:31
6840
发布2019-10-29 11:54:31
举报
文章被收录于专栏:FPGA开源工作室FPGA开源工作室

几何变换-镜像

镜像的目的是将图像进行翻转,如图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的数字识别三

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FPGA开源工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 几何变换-镜像
    • 1 原理
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档