基于FPGA图像的裁剪
1 几何变换介绍
几何变换:从新规定图像内像素的几何排列方式。
几何变换包括:缩放、旋转、平移等。这些变换一般用于校正图像处理引起的空间失真,或者通过将图像配准到一个预定义的坐标系统中用于规范化该图像(例如,将一幅航拍图像配准到一个特定的地图投影中,或者在立体视觉中对两幅互相配对的图像进行整形,使得行与外极限)。
与点操作和局部滤波器不同,输出图像通常来说并不是来自同一个输入像素位置。这就意味着需要一些形式的缓存来处理由于几何形状改变引起的延迟。最简单的方法是将输入图像或输出图像(或两者)保存在一个帧缓存中。大部分的几何变换不太容易用数据同时实现输入和输出。
输入和输出像素间的映射可以用两种不同的方法。
图1 几何变换的前向和逆向映射
前向映射:
前向映射将输出像素坐标(u,v)定义为输入像素坐标的一个函数mf
前向映射适用于处理数据流输入,例如,来自一个摄像头,因为它为每个输入像素指定其像素值会映射到输出的什么地方。
逆向映射:
逆向映射定义输入像素坐标为输出坐标的一个函数mr
逆向映射更适用于产生数据流输出,例如图像数据流输出到显示屏,因为对于每一个输出像素,逆向映射指定了像素值是来自输入图像的什么位置。
图2 几何变换的基本结构左:前向映射右:逆向映射
2 几何变换--裁剪
2.1裁剪原理
前向映射将原图像的像素坐标作为自变量,以某个变换函数得出目标图像的像素坐标,裁剪变换的变换函数如式1,Q为输出,I为输入,x和y为原图像坐标,t、b、l、r为四个边界,从某种角度来看,它实际上一种非线性滤波器,保留输入坐标的同时变换输出色彩。
所以,实现一个裁剪模块实际上是要通过给定的边界信息来确定可以输出的一个区域,然后根据是否在这个区域内来确定输出。
2.2 matlab实现裁剪
close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量
clear all;
clc;
[A,map]=imread('peppers.png'); %读入图像
rect=[75 68 130 112]; %定义剪切区域
X1=imcrop(A,rect); %进行图像剪切
set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图形图像位置的默认设置
set(0,'defaultFigureColor',[1 1 1])%修改图形背景颜色的设置
subplot(121),imshow(A); %显示原图像
rectangle('Position',rect,'LineWidth',2,'EdgeColor','r') %显示图像剪切区域
subplot(122),imshow(X1); %显示剪切的图像
图3 matlab实现裁剪
2.3 FPGA实现裁剪
1. `timescale 1ns / 1ps
2.
3. module corp#(
4. parameter DW = 8,//sigle lane 8bit
5. parameter IW = 1920,
6. parameter LEFT = 100,
7. parameter RIGHT = 700,
8. parameter TOP = 100,
9. parameter BUTTOM = 500
10. )
11. (
12. input pixelclk,
13. input reset_n,
14. input i_hsync,
15. input i_vsync,
16. input i_de,
17. input [DW*3-1:0] din,
18. input [11:0] hcount,
19. input [11:0] vcount,
20. output o_hsync,
21. output o_vsync,
22. output o_de,
23. output [DW*3-1:0] dout
24. );
25.
26. reg [DW*3-1:0] dout_r;
27. reg hsync_r;
28. reg vsync_r;
29. reg de_r;
30.
31. //Sequence alignment
32. always @(posedge pixelclk) begin
33. hsync_r <= i_hsync;
34. vsync_r <= i_vsync;
35. de_r <= i_de;
36. end
37.
38. assign o_hsync = hsync_r;
39. assign o_vsync = vsync_r;
40. assign o_de = de_r;
41. assign dout = dout_r;
42.
43. always @(posedge pixelclk or negedge reset_n) begin
44. if(!reset_n)
45. dout_r <= 0;
46. else if( hcount >LEFT && hcount < RIGHT && vcount > TOP && vcount <BUTTOM)// Crop Area
47. dout_r <= din;
48. else
49. dout_r <= 0;//background color
50. end
51.
52.
53. endmodule
实现结果:
图4 FPGA实现裁剪
几何变换中裁剪也是最简单的一个,我们可以通过裁剪保留我们最感兴趣的部分。
点“图像处理往期精彩”了解更多
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有