|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
: b/ {3 z0 R+ _; d6 R1 y' k8 l; X一、原理介绍:) [2 P/ l- g& K
伪彩色(Pseudo-color)图像的每个像素的颜色不是由每个基本色分量的数值直接决定,实际上是把像素当成调色板(Palettes)或颜色查找表(Color Look-Up Table,CLUT)的表项入口地址,根据该地址可查找出包含实际R、G、B的强度值,如果图像中的颜色在调色板或彩色查找表中不存在,则调色板会用一个最为接近的颜色来匹配。通过查找出的R、G、B强度值产生的色彩不是图像本身真正的颜色,因此称为伪彩色。, k' w) a$ ]+ w$ v1 ]
, [* A% h7 z& T! _伪彩色处理:7 y$ b a; Y$ e, ?& ?
( F# c. d! m: S! J. r$ j将彩色图像转换为灰度图像是一个不可逆的过程,灰度图像也不可能变换为原来的彩色图像。而某些场合需要将灰度图像转变为彩色图像;伪彩色处理主要是把黑白的灰度图像或者多波段图像转换为彩色图像的技术过程。其目的是提高图像内容的可辨识度。其中方法有,灰度分成法,灰度变换法。) p; b( J1 H: J$ G* n
3 o }# `" ]5 P/ q$ O" i& t
真彩色' e8 N# h4 [6 w2 S( Z- t
+ F; \8 U: [* _+ U1 J6 a9 B(true color)真彩色是指在组成一幅彩色图像的每个像素值中,有R,G,B三个基色分量,每个基色分量直接决定显示设备的基色强度,这样产生的彩色称为真彩色。例如用RGB 8∶8∶8表示的彩色图像,R,G,B各用8位,用R,G,B分量大小的值直接确定三个基色的强度,这样得到的彩色是真实的原图彩色。- x& u' r# Q9 G- O$ ^
/ ~* [* ?8 N2 w
在许多场合,真彩色图通常是指RGB 8:8:8,即图像的颜色数等于2^24,也常称为全彩色(full color)图像。但在显示器上显示的颜色就不一定是真彩色,要得到真彩色图像需要有真彩色显示适配器,在PC上用的VGA适配器是很难得到真彩色图像的。: U) B1 c% j4 \+ n& }
0 C& }- }6 t' z. a直接色1 e! B1 T$ y2 w
; d* A$ |0 x7 c
(direct color)每个像素值分成R,G,B分量,每个分量作为单独的索引值对它做变换。也就是通过相应的彩色变换表找出基色强度,用变换后得到的R,G,B强度值产生的彩色称为直接色。它的特点是对每个基色进行变换。
# B/ H0 E9 v+ T+ T# K
- i' t& o1 {) H, @. y6 O4 S, D用这种系统产生颜色与真彩色系统相比,相同之处是都采用R,G,B分量决定基色强度,不同之处是后者的基色强度直接用R,G,B决定,而前者的基色强度由R,G,B经变换后决定。因而这两种系统产生的颜色就有差别。试验结果表明,使用直接色在显示器上显示的彩色图像看起来真实、很自然。
& A: S, m. Y! y( o3 \
9 z2 s/ H) S P- ~" m这种系统与伪彩色系统相比,相同之处是都采用查找表,不同之处是前者对R,G,B分量分别进行变换,后者是把整个像素当作查找表的索引值进行彩色变换。
; L; q. V# @! z9 b) } O3 K1 C& Z: U- Z3 e
( E) g D+ R/ Q5 q" e! D7 T7 ^二、Matlab与Modelsim仿真
9 M& ?4 c) T0 R+ w) ]% X2.1 图像产生
3 ~: p& q! _' i l) w7 m* s; B: z# H如下图3所示,使用matlb将分辨率为640*480的len.bmp 图像的R、G、B各个分量的二维图像数据,如图4所示,转换成一维数据存到img_r_data.txt、img_g_data.txt、img_b_data.txt文本里供Modelsim读取。
! R2 E Q. i4 D$ Q/ d
" f8 u. F* y1 C" h) V
( T1 v! N# i3 B' N& o! K8 @# m/ B: q2 ]2 e3 N# N6 C: V1 M
图3 matlab gen 代码$ e3 l& L! A; i' o$ S P
8 m* O4 C- \- t; G1 p
2.2 图像处理
# k# z% }1 C- @: ~. W% v9 [2.2.1 rgbtoyuv 灰度化算法公式( V/ Q7 ]; t( g) l& g
1 Y# M% P+ k$ `# z. k- \9 f
采用rgbtoyuv格式的颜色空间的转换图像算法为例,转换公式如下 ," K! \ \6 Q; f, R" v
9 b6 i3 z9 Q0 f4 S& C1 c% m% n
$ s t9 y9 r1 E/ e0 M# T+ v/ m h9 B+ ^/ \
2.2.2 graytorgb伪彩算法公式5 d- _2 ^, A7 d0 R, D, [3 Q' H
3 o: Z3 t' a. f6 `3 ?: \ 如下图所示是matalb 代码 ,三个颜色通道对应3个公式:" y6 L' W1 [1 g, }; \
7 s, |- {& t; V6 u
9 d( @; F4 V& g3 e) K2 F3 A+ m% ~! n8 Q( j( p% }
2.2.3 FPGA实现* B8 N8 ]6 p( x M
$ _& a% t5 `+ Y- k0 y1 U
在FPGA实现过程中,没有直接使用上述matlab代码的”if-else”进行图像的点操作,这里我使用查找表的方式实现,把三个颜色通道R、G、B 看成是灰度(0~255)的函数,通过matlab得到各个颜色的映射值的mif文件,然后导入fpga的rom 中,当像素进来时直接作为的rom的读地址,rom的输出就是处理得到的伪彩色图像。生成mif文件的matlab代码,其中t可以理解为灰度值,R、G、B为各颜色通道值。, m( b* f$ A- k6 ~1 ?( B) d1 j
1 U& k6 Z! n: \4 d: B9 A
5 S2 ?) N/ r2 e. u. Q1 K0 b! K0 m9 _; `; z
! e. N s! Z6 z9 p$ e+ y
: x7 t' X# Z0 M" G2 ?9 nFPGA实现时分别把对应的线性映射数值存到rom中:5 H+ L/ d: z% t0 w2 p- r6 l
* C8 A A- B/ r3 f! y* j' P
2 A' p- j2 c2 G0 i( U. u' o+ X
: s% \) T# n3 ]8 `% P3 J
2.3 图像显示
8 B: Q- g9 ^* |. X6 ?, C) l在编写完RTL代码后加入视频流仿真平台,处理的后的结果如图6所示,其中图像的复现的matlab代码如图5所示:; x% x9 f& e; q$ E" Z
4 A! Z% B6 P; [) P) O4 Z
图5 matlab show 代码
+ ~+ X. w8 O5 b3 U# K& w6 g |
|