视觉论坛VISIONBBS微信公众号:石鑫华视觉网

 找回密码
 注册会员
查看: 939|回复: 19

[原创] 两幅图像叠加的三种方法

[复制链接]
  • TA的每日心情
    慵懒
    昨天 09:57
  • 签到天数: 1224 天

    [LV.10]100FPS

    发表于 2017-4-22 17:51:36 | 显示全部楼层 |阅读模式
    两幅图像叠加的三种方法
    有些时候可能需要叠加两幅图像,这时可以直接使用运算中的加来叠加两幅图像:
    两幅图像直接叠加效果图
    游客,如果您要查看本帖隐藏内容请回复
    两幅图像直接叠加程序框图
    但是从上面的效果图中可以看到。如果两幅图像都比较白时,则会丢失数据。上面的是两幅8位灰度图的叠加,输出的图像仍然是8位图。而8位图像最大值为255。这时,只要两幅图像对应的像素点的值之和大于255时,就会变成全白的,也就是溢出丢失数据。例如,1图中的点灰度值为2002图中对应点灰度值为180时,这时两个点之和为380。但是在输出的叠加图像中,只能有最大255的灰度值。可以从上面的效果图中看到,两幅图像的卡片处因为比较白,叠加后丢失了很多信息,很多都变成全白的了。
    一种比较有效避免这种问题的方法,就是将原始U8灰度图像转换成U16图像,然后再使用加法计算其值。再将叠加后的U16位图像转换成U8图像,这时叠加后的图像不会丢失信息。但是两幅图像的所有信息会变化。或者是先将原始的两个U8灰度图像分别除以2,这时最大值只有128,然后再叠加,这时最大值为256,会强制变成255,但时这时只会丢失1个灰度级的信息。
    U8U16后叠加效果
    游客,如果您要查看本帖隐藏内容请回复
    U816后叠加程序框图
    使用这种方法,可以对移位的位数进行控制。例如可以移位2位,这时叠加后的图像会更黑一些:
    U8U16后叠加效果-移位2
    下面的效果则为U8除以2以后再叠加
    U8除以2后再叠加效果图
    游客,如果您要查看本帖隐藏内容请回复
    U8除以 2后再叠加程序框图
    当然,其实还有一些方法,如NI的范例中就还有一种叠加方法Image to EDVR。不过个人觉得不是很直接。大家有兴趣可以去研究下。NI范围的运算符下的平均值,也是转换成U16叠加后求平均值后再转换成U8的。
    NI范例-Image toEDVR
    示例程序下载:LabVIEW2014SP1
    游客,如果您要查看本帖隐藏内容请回复

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册会员

    x
    回复

    使用道具 举报

  • TA的每日心情

    2017-4-28 08:04
  • 签到天数: 7 天

    [LV.3]30FPS

    发表于 2017-4-24 10:50:02 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-6-3 09:30
  • 签到天数: 2 天

    [LV.1]10FPS

    发表于 2017-6-2 11:16:42 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-4-19 17:44
  • 签到天数: 20 天

    [LV.4]40FPS

    发表于 2017-6-16 17:08:38 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-10-9 15:53
  • 签到天数: 84 天

    [LV.6]60FPS

    发表于 2017-6-21 10:32:38 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2017-7-3 00:07
  • 签到天数: 3 天

    [LV.2]20FPS

    发表于 2017-7-2 14:08:40 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    昨天 00:00
  • 签到天数: 49 天

    [LV.5]50FPS

    发表于 2017-7-9 16:58:28 | 显示全部楼层
    IMAQ Cast Image转换图像0 z+ Y( H0 ?& E/ \/ q
    转换图像,在实际使用时,还是有一定的使用价值的,可以将某种图像转换成其它指定类型的图像。例如将彩色图像转换成灰度图像,或将U8转换成U16图像。2 S# L) w6 u& G& x- I
    IMAQ Cast Image转换图像函数在程序选板中的位置
    & E' L" i5 g# R8 f* n+ ]IMAQCast Image转换图像函数在程序选板中的位置6 ~/ w4 z! g$ {& {8 Q" j
    IMAQ Cast Image转换图像函数功能说明与接线端  {- @, |5 |0 W" u" D( t8 r
    IMAQCast Image转换图像函数功能说明与接线端
    ; F1 y# `# ]2 ^: k转换当前的图像类型为指定(由Image Type指定)的图像类型。如果指定了查找表,由转换图像函数使用查找表转换图像。如果转换一个16位图像到8位图像,该函数执行转换的方法为:将16位的像素值右移指定数量的移位操作(16位到8位需要右移8位),然后截取剩下的8位值。- Y( Z( `) D' I1 z/ z% F
    有关于转换图像的概念,可参考NI视觉概念帮助手册《NI Vision Concepts Help》。
    & E' l9 f8 i+ m8 ~6 i+ H参考下面的Casting Images转换图像表来学习该函数是如何转换像素值的,当原始图像ImageSrc的类型和图像类型Image Type参数不相同时。
    % W$ K  x; U* vCasting Images转换图像表
    * z6 {! i" D% u, O" @& I# W8 V! w  ) s( ]; b6 y8 ^) N" N- D& T  F% Z
    Image Src Type
    " |3 B, |4 A0 q& w  ; X4 o2 ?7 r6 w8 C9 h
    原始图像类型8 M9 h" g6 A2 t; E$ \, d4 [" I# @
              ' E; q3 v; N4 S3 w4 ?8 E
    Image Type
    2 p: \$ r- E# g4 j- E$ q6 _' S7 U$ |: X  8 @% @' L" U/ e" O5 o5 ]6 k
    图像类型
    0 i: ]4 D2 G. UResult
    3 B3 s: T1 Y6 h4 p8 u) D5 Y, e  2 J# R: c; g. d) T
    结果
    - o' g3 _: V. Q/ E; R U8: _9 w: v# j; _/ B; J8 n
    U16  I16  SGL+ O- L( t( _6 |% Q3 B
    If you provide a lookup table, the  destination pixel will have the lookup value of the source pixel. If you do  not provide a lookup table, the VI copies the source value to the destination  unmodified.1 K" o. z" z5 ^8 q9 D* z( C/ B
      
    # q3 l6 [) A& `$ u如果提供了一个查找表,目标像素将赋值源像素的查找值。如果不提供查找表,该函数将源像素值不修改复制到目标像素。
    $ G; q2 y8 v$ [$ [0 Z5 J U8  U16  I16  SGL
    4 d# ]0 b% u% ?% y RGBU32
    3 r- @' p# l2 H3 {/ U/ M$ l% NEach color component of the destination is  set to the source value. If the source value is greater than 255, the VI sets  each color component to 255. If the source value is less than 0, the VI sets  each color component to 0. If the source image has a specified bit depth, the  VI uses the bit depth when performing this conversion.: c: B- A6 v& c
      & K. F- b& y. a' q0 ?
    目标的每个颜色分量设置为源值。如果源值大于255,则该函数将每个颜色分量设置为255。如果源值小于0,则将每个颜色分量设置为0。如果源图像具有指定的位深度,该函数使用指定位深度在执行此转换时。
    % A& v2 B! @  {9 |$ [ U8  U16  I16  SGL& Z/ j/ \2 @- I0 d( k
    HSLU32# Y9 U, \) X4 ?0 T
    The VI  sets the luminance component of the destination to the source value. If the  source value is greater than 255, the VI sets the luminance to 255. If the  source value is less than 0, the VI sets the luminance to 0. The VI sets hue  and saturation component of the destination to 0. If the source image has a  specified bit depth, the VI uses the bit depth when performing this  conversion.
    1 Y$ L+ q6 A, j9 m% n% s2 Z  P  
    ! ?5 f& z  t1 l# J- N& O( ?函数将目标的亮度分量设置为源值。如果源值大于255,则函数将亮度设置为255。如果源值小于0,则函数将亮度设置为0。函数将目标的色调和饱和度分量设置为0。如果源图像具有指定的位深度,该函数使用指定位深度在执行此转换时。
    & q; p: N6 ~" o6 I0 T1 b* K# w1 \ U8  U16  I16  SGL
    8 `3 n- _" U5 r) Q CSG; w4 |" U* E4 d5 w( Q
    The VI sets the real component of the  destination to the source value. The VI sets the imaginary component of the  destination to 0.
    0 k0 P/ k* |$ e. J) x7 P    U. _, W$ A- d  V0 c8 ]
    函数设置目标的实部分量为源值。函数设置目标的虚部为0。/ _" ?* p) `' E+ w2 f
    U16  I16+ ~  e* t# Y, V! ]9 F
    U8
    . S- _+ k6 Y9 m0 E/ v8 r. U+ w+ dThe VI shifts the source value to the  right by the given shift value (divides each source pixel value by 2^shift )  and stores the value in the destination. If the shifted value is greater than  255, the VI sets the destination value to 255. If the shift value is zero,  the VI uses the specified bit depth of the source image.8 c  r; n# o7 |6 \! f8 {% X
      
    ' y# `2 K* s4 R; \函数将源值右移指定的位数N(右移N位即为除以2的N次方,N为移动位数),并将其存储该移位后的值在目标里。如果右移后的值大于255,则函数将目标值设置为255。如果移位值为零(N为0),则函数使用源图像的指定位深度。8 P$ ]( ~6 D" W  o- E  u- i' ^$ J! y
    image3.gif  U16  I16  SGL2 y( y7 B/ e2 |$ C! P% d! u5 w
    RGBU64! A  G9 G5 @# |/ _2 H$ k
    Each color component of the  destination is set to the source value. If the source value is greater than  65535, the VI sets each color component to 65535. If the source value is less  than 0, the VI sets each color component to 0.
    " h  S' T+ ^7 X/ g3 p0 V: U8 D  
    6 }; E8 Y& a0 m. i+ A( h+ {目标的每个颜色分量设置为源值。如果源值大于65535,则该函数将每个颜色分量设置为65535。如果源值小于0,则将每个颜色分量设置为0。. z" c+ ?& ?9 j& X5 N) U
    RGBU64
      {: d( |  ^' W8 o$ V U8% A+ ]! P3 x6 u  _. G+ E; X
    The VI shifts the source value to the 8-bit range using the specified  bit depth of the source image. Then the VI sets the destination value to  the average of the three color components of the source.
    9 D) Z) @* l; t* U: c  
    7 z& o% U' ~% B* j该函数使用指定位深度源图像将其源值转换为8位范围(应该是每个颜色分量都使用右移,NI没有介绍)。然后将目标值设置为转换后源值的三个颜色分量的平均值。  t$ j& L, ~2 X, O' E
    RGBU64% R9 y- G4 w& U4 h5 h3 ~2 N% j
    U16  I16  SGL
    8 f: D: W1 m$ Z# XThe VI sets the destination  value to the average of the three color components of the source. If the  average of the source color components is out of the range of the  destination, the VI coerces the average to the range.
    & c- A% ~8 ?2 s4 a  9 }+ j8 V( {- y' o4 n
    函数将目标值设置为源值的三个颜色分量的平均值的。如果源值的颜色分量平均值超出目标范围,函数强制转换平均值到范围内。
    / c/ ^2 d! B  A1 O, h6 g% } RGBU64; U& h7 Q; Q$ w% _8 V# K7 |
    RGBU32# @$ q8 u9 @2 ^
    The VI  shifts the source value to the 8-bit range using the specified bit depth of  the source image. Then the VI sets each color component in the destination  value to the corresponding component in the source value.
    / u- M' _1 q  }: U+ `  ( G, M0 B" S5 i4 I! x: u
    函数使用指定位深度的源图像将其源值转换为8位范围。然后,将目标值中的每个颜色分量设置为源值中的相应分量。
    + ?: n7 q/ L. C2 h) ^# r$ { RGBU64/ T7 G! |: R) A
    HSLU32$ I% H( `! R, I( Y6 o$ d; |9 m
    The VI shifts  the source value to the 8-bit range using the specified bit depth of the  source image. Then the VI converts each pixel from the RGB color space to the  HSL color space.
    6 B" m3 `; F+ E3 @: c9 @    A5 B+ w9 [3 ^/ |+ d
    函数使用指定位深度的源图像将其源值转换为8位范围。然后函数转换每个像素的RGB颜色空间到HSL颜色空间。
    - l) P2 e8 m  n/ m# o1 B U16  I160 N9 d  a) q) L
    SGL5 l. o) H1 h& t
    If you provide a lookup table, the  destination pixel will have the lookup value of the source pixel. If you do  not provide a lookup table, the VI copies the source value to the destination  unmodified.7 A7 q- E5 o/ v$ b
      
    4 I4 [8 N$ P$ T" f' l& L如果提供了一个查找表,目标像素将由源像素的查找值赋值。如果不提供查找表,该函数将未修改的源值复制到目标中。& J" @2 T% v- v+ s5 S' w; X) C- C; }
    SGL
    * w  F0 D: a3 Q. i" d1 U U8  U16  I161 U5 j  z: P, x# k' Q' S+ u* |
    The VI  sets the destination value to the source value. If the source value is out of  the range of the destination, the VI coerces the source to the range.5 _+ g: V! ^) ]" W- m
      
    8 p2 z' e/ Q: n1 q' j函数将目标值设置为源值。如果源值超出目标的范围,函数强制转换到范围内。& K9 G% E6 [* E) A+ I6 O# M
    RGBU327 ]% b% W* p6 o0 |
    U8  U16  I16  SGL
    ' j/ a: J7 G- r6 T' F9 Z3 s+ o; FThe VI sets the destination value to the average of the three color components  of the source.
    9 j7 A# M- I) v! e7 \' e+ b3 R" P; P  
      M5 }& k( a/ B, R函数将目标值设置为源值三个颜色分量的平均值。
    7 M) D9 l$ B* q' O RGBU32  h4 G: f9 T$ E3 A) m
    HSLU32
    : ]  _9 s0 ~( [& |* pThe VI converts each pixel from the RGB  color space to the HSL color space.
    + [2 j3 ~2 [- `# w1 Z  
    6 ^" }3 K8 J) K( k0 _+ O函数转换每个像素的RGB颜色空间到HSL颜色空间。) u1 v# @) o" [: o5 Z& \
    RGBU32  RGBU647 S1 M/ g  o! ~; _: f
    CSG6 l& m5 l+ s; ]. d: V7 p% K, d& n
    The VI  sets the real portion of the destination value to the average of the three  color components of the source, and it sets the imaginary portion of the  destination to 0.( j" K# i- @- e. i8 F
      5 J5 A$ }* ^1 _1 p" O- k* e( e- y
    函数将目标值的实部设置为源值三个颜色分量的平均值,并将目标值的虚部设置为0。
    9 H% t3 Y, G# q HSLU32! h9 i' C( U* u
    U8  U16  I16  SGL% s$ m9 m% ^& m( {$ b
    The VI sets the destination  value to the luminance component of the source value.
    6 Z9 w% N) ~" Y1 t  z  ! i0 Q2 X) w- Z& k7 V
    函数设置目标值为源值的亮度分量。
    ) j$ @( A& b& g. b: @, q HSLU332
    1 d/ K- q) X: L  R: W. ~ RGBU32  RGBU64
    # R/ W$ i  n; ]# j" D+ H& kThe VI converts each pixel from the HSL  color space to the RGB color space.
    # T2 \3 {& R/ t' m3 D# x# q  2 v. j+ ]1 _! l& R1 r( Z
    函数转换每个像素的HSL颜色空间为RGB颜色空间。. x% L. o2 ?6 ^: ]8 C& h
    HSLU32
    , T. [& x2 g! c0 \ CSG+ b2 i; \, A6 ~8 ~  v1 c( ^2 `
    The VI sets the real portion of the  destination value to the value of the luminance component of the source, and  it sets the imaginary portion of the destination to 0. If the source value is  out of the range of the destination, the VI coerces the source to the range.
    # t  h. k' a+ ^  4 C" K! [# d5 ^) h' z
    函数将目标值的实部设置为源值亮度分量的值,将目标的虚部设置为0。如果源值超出目标的范围,范围强制转换到范围内。
    0 `( W6 U5 }9 Z  u0 Q CSG
    4 o! [3 l; w: e+ n3 C- r U8  U16  I16  SGL
    ! U! c6 f- o4 b- [9 [- bThe VI  sets the destination value to the magnitude  of the source value. If the source value is out of the range of the  destination, the VI coerces the source to the range./ R9 Y. R/ d, t
      
    ' r' u; A  S% O函数将目标值设置为源值的模(复数的向量长度、大小或绝对值)。如果源值超出目标的范围,函数强制转换到范围内。
    : W5 n0 y) @9 N+ C CSG; K! Q! @1 A  u* @3 a4 K- ~$ r
    RGBU32  RGBU64$ ]& o) r0 Q- O# l- H: e
    The VI sets each color component of the  destination value to the magnitude of the source value. If the source value  is out of the range of the destination, the VI coerces the source to the  range.
    8 W  J: e$ [$ O' w; Y$ `3 J  
    6 ?( D; E; h  ^4 m% }2 u函数设置目标的每个颜色分量为源值的模。如果源值超出目标的范围,函数强制转换到范围内。% x+ M) C& T7 `
    CSG. A/ f0 ~# Y/ r
    HSLU32
    6 V3 C# q2 T( Y, P4 mThe VI sets the luminance component of the  destination value to the magnitude of the source value, and it sets the hue  and saturation components to 0.
    8 T. W- m- S% s6 ~; L/ i: i  4 o" r% p: }. o+ D- o: A" y$ {8 ^& E
    函数设置目标的亮度分量为源值的模,并且设置色调和饱和度分量为0。/ W6 I1 y; R9 n% u
    CSG
    , U, d: N# Q: C; @ I16' T4 h+ t( H; R' g) B
    The VI sets the destination value to the  source value. If the source value is out of the range of the destination, the  VI coerces the source to the range.
    0 p7 h3 O0 a- E: @$ j3 n  
    # K2 r: b1 b# C  b: ?函数设置目标值为源值。如果源值超出目标值范围,函数强制转换源值到范围内。
    * P9 Z. }3 [9 z: m CSG9 o/ Y' ]+ [6 J# I: R* z
    U16
    7 X9 [- f9 e. p: W& ^* VThe VI sets the destination value to the  source value. If the source value is out of the range of the destination, the  VI coerces the source to the range.
    ! }; v) ~, L6 f  - B3 r. E9 K4 @1 @  N3 R6 N
    函数设置目标值为源值。如果源值超出目标值范围,函数强制转换源值到范围内。  @% Y* v  D# z- ]4 Z4 Z; L$ M5 K
    下面看一下具体的实例效果:
    , F! y& I* p! @( F# n( v本帖隐藏的内容
    6 e& x2 l# G, _5 E& s* H
    0 C% a  T, Y& H. ^& N" j Cast Image转换图像程序框图
    # I/ |) ]. S: b- i( r4 ^: C7 z8 b) _  r8 v. Z4 I- @7 I
    1 |/ k0 V+ W0 U% ^/ K( SCast Image转换图像程序框图( s1 U6 F) ]% q
    Cast Image转换图像实例效果-将RGB32彩色图像转换为U8灰度图像
    1 R; x! b: _& r" kCast Image转换图像实例效果-将RGB32彩色图像转换为U8灰度图像9 G, _" f6 d4 A" N# O- q
    Cast Image转换图像实例效果-将RGB32彩色图像转换为HSL32图像6 Z" o6 ~0 X0 K8 G" D" z- `
    Cast Image转换图像实例效果-将RGB32彩色图像转换为HSL32图像
    ' e! W+ d+ m! z; q/ z转换函数比较少用到实际项目中,如果是需要将彩色图像转换为灰度图像,一般使用抽取颜色平面即可,而且还可选择抽取哪个平面特征能最佳。所以,其实际作用并不是很明显。当然,如果是使用16位的图像,那么在某些时候可能必须要转换成8位的图像才可以处理,这里就有应用的价值了。; ]+ \( }* w$ t+ u
    另外就是,有些图像,抽取其HSL空间是会有优势一点,这样就要将图像显示为HSL。而一般的相机输出的都是RGB图像,这时就需要使用该函数,将RGB空间转换成HSL空间。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2017-10-31 11:09
  • 签到天数: 9 天

    [LV.3]30FPS

    发表于 2017-7-13 10:52:42 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

    淘宝机器视觉商城

    Archiver|手机版|小黑屋| 机器视觉之家|东莞市华动智能科技有限公司 ( 粤ICP备17078359号-2 ) |网站地图

    GMT+8, 2018-6-20 04:20

    Powered by shixinhua.com X3.4

    © 2001-2018 VISIONBBS.COM 浏览量:

    快速回复 返回顶部 返回列表