视觉论坛VISIONBBS_视觉之家VISIONHOME微信公众号:石鑫华视觉网

 找回密码
 注册会员
查看: 2917|回复: 2

[原创] 基于Vision Assistant的图像处理实用教程-第一章 基本概念 1.1数字图像

[复制链接]
  • TA的每日心情

    昨天 12:37
  • 签到天数: 1625 天

    [LV.Master]120FPS

    发表于 2017-5-11 09:35:44 | 显示全部楼层 |阅读模式
    本帖最后由 石鑫华视觉 于 2017-5-11 09:39 编辑
    * X, o& {5 ], K3 S' ^+ v3 }8 G( s5 D9 I, L$ r6 y8 L& B' B# a5 ?, I
    《基于Vision Assistant的图像处理实用教程》又名《NI视觉助手图像处理教程》,现免费公开阅读。
    第一基本概念第一节 数字图像数字图像的定义
    一幅图像是一个二维数组,其值代表了光强度。对于图像处理,“图像Image”这个术语指的是数字图像。一个图像是光强的函数:
    f(x,y)
    其中f是点(x,y)处的亮度,而x和y则代表了图像元素或像素的空间坐标。
    按照惯例,空间坐标原点(0, 0)的像素位于图像的左上角。如下图所示,其中X的增加是从左往右的,而Y的增加是从上往下的。
    1 NI视觉中图像原点坐标与方向的定义
    在数字图像处理中,图像传感器将一幅图像转换成离散的像素。图像传感器分配给每个像素一个位置以及一个灰度或颜色值,这个值代表了像素的亮度或颜色。
    数字图像的属性
    一幅数字图像有三个基本的属性:分辨率(Resolution)、清晰度(Definition)以及平面数量(Number of Planes)。
    分辨率(Resolution
        一幅图像的空间分辨率是由它的行与列的像素数量决定的。一幅图像由m列和n行,则其分辨率为m×n。这幅图像沿着水平轴有m个像素,沿着垂直轴有n个像素。
    清晰度(Definition
    图像的清晰度表明了你在图像中可以看到的色度(组度级别)的数量。一幅图像的位深度(Bit Depth)是用于像素值编码的数量。对于一个给定的位深度n,则该图像的图像清晰度为n,这意味着一个像素可以有2^n个不同的值。例如,如果n等于8位,一个图像则有0~255的范围内共256个不同的值。如果n等于16位,一个像素则有65536个不同的值,其范围可以从0~65535或-32768~32767。
    NI视觉可以处理8位、10位、12位、14位、16位、浮点或彩色编码的图像。图像的编码方式取决于图像采集设备的性能以及你处理图像时需要使用的类型。例如,如果你想从一幅图像中获得目标的形状信息,那么8位编码就足够了。但是,如果你需要精确测量一幅图像或图像中区域的光强度,你应该使用16位或者是浮点编码的图像。
    当你的机器视觉或图像处理程序是依赖于你检查和分析的目标的颜色内容时,你应该使用彩色编码的图像。
    NI视觉不直接支持其它类型的图像编码类型,具体的图像编码如1位、2位、4位等。在这些情况下,当打开一幅图像时,NI视觉会自动转换图像到8位图像-NI视觉的最小位深度。
    平面数量(Numberof Planes
    图像的平面数量相当于组成图像的像素数组数量。一个灰度或假的彩色图像是由一个平面组成的。一个真彩图像是由三个平面组成的-红色Red平面、绿色Green平面、蓝色Blue平面。在真彩图像中,每个像素的颜色分量强度由三个不同的值编码在一起。一个彩色图像是由三个像素的数组组成的,对应于RGB图像中的红、绿、蓝成份。HSL图像则定义了他们的Hue色相、Saturation饱和度、Luminance亮度值。
    图像类型
    NI视觉库可以操作3种类型的图像:灰度、彩色以及复数图像。虽然NI视觉支持三种类型的图像,但是在一些特定的图像类型上某些操作是不可能的。例如,你不能在一幅复数图像上应用逻辑运算与。
    下面的列表显示了灰度、彩色、复数图像每个像素有多少字节。对于一个相同的空间分辨率,彩色图像占据的内存空间是8位灰度图像的4倍,一个复数图像占用的内存空间则为8位灰度图的8倍。
    2 各图像类型占用的内存空间
    灰度图像
    一幅灰度图像是由一个单一的像素平面组成的。每个像素的编码使用以下的单一数字:
    l  一个8位无符号整形表示的灰度值在0~255之间;
    l  一个16位无符号整形表示的灰度值在0~65535之间;
    l  一个16有符号整形表示的灰度值在-32768~32767之间;
    l  一个单精度浮点数,编码使用4字节,表示的灰度值范围从-∞到+∞。
    彩色图像
    一幅彩色图像在内存中的编码是一幅红、绿、蓝(RGB)图像或者是一幅色调、饱和度、亮度(HSL)图像。彩色图像的像素合成了4个值。RGB图像(32位)对于红、绿、蓝平面分别使用8位保存颜色信息。HSL图像对于色调、饱和度、亮度分别使用8位。RGB U64图像(64位)对于红、绿、蓝平面使用16位保存颜色信息。在RGB或HSL颜色模型中,一个额外的8位值是没有使用的。这种表示法被称为4个8位或32位编码。在RGB U64颜色模型中,一个额外的16位值是没有使用的。这种表示法被称为4个16位或64位编码。
      
    Alpha平面(未使用)
      
        √5 q/ V( s7 l2 J% d, [6 d

    8 j# i8 [1 Y4 l, ]$ l0 T- p- Q
    3 J0 \6 }' e! Y; F2 _
    ( s1 r  Z- ~$ O6 p. x
       
    Red或Hue平面
        # `; e. ^, k7 O$ }; X

      T8 N" A* m/ m' V) u
    & z5 ?6 O% m0 S% n
       
    Green或Saturation平面
       
    4 f! c  Z! \+ r1 f1 O  B. l
    2 z3 ?; X# h' ?: c3 t; L' e
    0 o# i0 {7 B' `& B0 k& v1 G5 c
       
    Blue或Luminance平面
        ; |- r7 l* Q4 k& |6 ^* J6 q
    6 R4 [0 P2 n2 x: F; E0 `6 M. @. E6 X
    ) a0 k. G! N2 {
       
    复数图像
    复数图像包含了灰度图像的频率信息。你可以通过对灰度图像执行快速傅里叶变换(FFT)创建复数图像。在你将一幅灰度图像转换成复数图像后,你可以在图像上执行频域操作。
    在复数图像中的每个像素被编码成两个单精度浮点值,它代表了复数像素的实部和虚部。你可以从一幅复数图像中提取下面的四个部分:实部、虚部、模与相位。
    图像文件
    一个图像文件是由一个头随后跟随像素值组成的。根据不同的文件格式,文件头包含了图像信息,如水平和垂直分辨率、像素清晰度以及原始调色板。图像文件也会保存标定信息、模式匹配模板以及覆盖等。下面所举的为常用的图像文件格式:

      $ y$ U! n' {6 P: g" n6 I4 S
    • Bitmap (BMP)
    • Tagged image file format (TIFF)
    • Portable network graphics (PNG)—提供了存储图像信息的能力,如空间标定、模式匹配模板、自定义数据以及覆盖等。
    • Joint Photographic Experts Group format (JPEG)
    • Joint Photographic Experts Group 2000 format (JPEG2000)
    • Audio Video Interleave (AVI)—提供了储存多帧图像在单一文件中的能办。
    • National Instruments internal image file format (AIPD)—用于保存浮点、复数以及HSL图像。
      - y$ v4 R- v/ r/ d* {1 |
    下面的表列出了每种图像类型支持的图像文件格式:
      
    " l+ T; p" e* D; m1 Z1 U: V# u  
    BMP
    TIFF
    PNG
    JPEG
    JPEG
    $ g: Y# P+ e7 h8 G1 `  2000
    AVI
    AIPD
    8-bit Unsigned Grayscale
    16-bit Unsigned Grayscale

    + I# A7 o) o# W: w% V
      

    7 g/ s8 m. Z9 i/ g3 A8 ]
      
    7 k7 q9 U. w# [. M  t7 D
      
    16-bit Signed Grayscale
    4 b" h, }9 }# \2 Q
      

    9 F- I9 @. X( \! _( ?
      

    7 M3 P9 V& Z0 O/ |6 E0 h
      
    32-bit Floating-Point Grayscale
    + ^9 Z, |' ^' J, }$ k- i
    $ m8 B& u: {$ z6 H  H4 y' S1 \
    ! _0 ?1 E, J4 K
      
    32-bit RGB Color
    64-bit RGB Color
    ' x( s6 `* v+ U. b) M8 O7 ^
      

    - I+ L/ D; C0 w% D5 g8 y# r$ j" {
      

    # F% N  V. }0 b, S$ b
      
    32-bit HSL Color

    ! q( z$ I. P8 s* U% k3 v
    , u. J/ C1 ?2 r4 }0 `

    # H/ [! ^, j8 j# ]. e8 V5 {
      
    Complex
      

    : S# |1 r7 ]4 M) t% O* E
    % R+ Q5 I: R2 _% s* U) p6 X
    + y% U, U2 U% l+ K
    NI视觉图像的内部表示
    下图说明了NI视觉图像在系统内存中是如何表示的。除了图像像素,存储的图像还包括额外的像素行和列,被称为力争边界和左、右对齐。某些特别的处理函数包括像素邻域操作需要使用图像边界。对齐区域确保图像中的第一个像素在内存中是32字节对齐的。对齐块的大小取决于图像宽度和边界的大小。对齐图像增加处理速度高达30%。
    线宽是一幅图像水平方向像素的总和,包括水平分辨率的总和、图像边界、以及左和右对齐。当水平分辨率是32字节的倍数及边界尺寸为0时,水平分辨率和线宽有相同的长度。
    3 NI视觉图像的内部表示
    1、  Image图像
    2、  Image Border图像边界
    3、  Vertical Resolution垂直分辨率
    4、  Left Alignment左对齐
    5、  Horizontal Resolution垂直对齐
    6、  Right Alignment右对齐
    7、  Line Width线宽
    图像边界
    许多图像处理函数通过使用其邻域的值来处理像素。一个邻域(neighbor)是一个像素,在图像处理时其像素值会影响邻近的像素值。沿着图像的边缘上的像素在其四边不一定都有邻域。如果你需要使用一个函数处理像素是基于相邻像素的值,指定围绕图像的图像边界(image border)来解释这些外在不相关的像素。
    边界的大小应该容纳你正在使用的函数所以需要的最大像素邻域。邻域的大小是通过二维数组的大小来指定的。例如,如果一个函数使用一个像素的8个相邻像素进行处理,则其邻域大小为3×3,表示一个数组有3行和3列。设置边界尺寸大于或等于二维数组的行或列的一半向下取整的整数值。例如,如果一个函数使用3×3的邻域,图像应该有一个边界至少大于1个像素(3的一半为1.5,向下取整为1)。如题个函数使用5×5的邻域,图像应该有一个至少大于2个像素的边界。在NI视觉,一幅图像创建时默认使用边界尺寸为3个像素,它可以支持任何函数使用最多7×7的邻域而不需要做任何修改。
    NI视觉提供了三种方法来指定图像边界的像素值。下面的图展示了这些操作。图4-A显示了一幅图像的像素值。默认情况下,所有的图像边界像素值是未初始化的。你可以设置所有的边界像素值为0,如图4-B。你也可以复制图像上沿着边缘上的像素的值为边界像素里,如图4-C所示,或者你也可以沿着图像边缘上的像素值镜像到边界像素中,如图4-D所示。
    4 图像边界像素的填充值
            你用于填充边界像素的方法取决于应用程序所需的处理函数。函数工作前需要选择合适的边界填充方法,因为选择的填充方法可以很大程度上影响处理结果。例如,如果你使用一个检测边缘的函数,其是基于图像上的像素与其邻域的不同强度,这时就不能设置边缘强度为0
    如图4-B所示,一幅图像边界包含0值,则在图像边界与图像像素之间引入了一个显著性的差异,这会引起函数沿着图像的边界检测到一个错误的边缘。如果你使用边缘检测函数,复制或镜像边界位置的图像像素值到边界区域中以获得更准确的结果。
    在NI视觉,大多数图像处理函数使用邻域像素值自动设置边界像素值。灰度滤波器操作低通、N次样条、以及边缘检测使用镜像方法来设置图像的边界像素。二值形态学、灰度形态学以及分割函数则复制边界上的像素值到边界区域中。相关、圆、拒绝边界、删除粒子、骨架以及标签函数则设置边界像素值为0。
    这里需要注意的是边界仅仅只在处理时考虑。在显示或保存图像时是不会有边界的。
    图像掩模
    图像掩模(Image Mask)隔离图像的一部分再进行处理。如果一个函数有图像掩模参数,函数处理或分析是基于原始图像与图像掩模这两幅图像的。
    图像掩模是一幅8位的二值图像,与检查图像有相同的大小或更小的尺寸。在图像掩模中的像素决定检查图像中对应的像素是否进行处理。如果在图像掩模中一个像素有非0值,检查图像中对应的像素需要处理。如果图像掩模中的一个像素是0值,检查图像中对应的像素则不会被处理。
    当你想集中你的处理或检查在图像中的某个区域时,可以使用图像掩模。
    图像掩模概念
    当图像掩模中的一个像素有非0值时,原始图像中对应的像素被处理。下面的图像显示了掩模是如何改变图像中的像素值并影响函数输出的。图5-A显示了检查图像。图5-B显示了图像掩模。在掩模图像中,像素值为0的像素表示成黑色,像素值为非0的像素表示为白色。图5-C显示了使用图像掩模反转的检查图像(只在中间的小方块处反转了图像,小方块外面没有反转)。图5-D显示了没有图像掩模的反转图像(整个图像都反转了)。
    5 图像掩模的影响
    图像掩模的影响
    你可以应用图像掩模包围矩阵区域来限制想要处理的区域。这种技术通过限制图像掩模可以节约内存,只有图像的一部分包含重要的信息。为了记录关于原始图像的兴趣区域(ROI)的位置,NI视觉设置了一个偏移量(offset)。偏移量在原始图像中定义了放置图像掩模的原点坐标位置。
    下面的图显示了应用图像掩模的不同方法。图6-A显示了一个想要应用图像掩模的ROI。图6-B显示了一个与检查图像有相同大小的图像掩模。在这种情况下,偏移量offset被设置成[0,0]。掩模图像也可以与ROI包围的矩形有相同的大小,如图6-C所示,其中偏移量offset指定了掩模图像在参考图像中的位置。你可以定义这个偏移量offset来应用掩模图像到检查图像的不同区域。
    6 图像掩模与偏移量
    下面的图显示了使用两个不同的偏移量的掩模。在图7-A显示了检查图像。图7-B显示了图像掩模。图C和图D显示了函数使用图像掩模的结果,其中偏移量分别为[0,0]和[3,1]。
    7 不同偏移量图像掩模结果

    1 h, c! i' i6 P" ^  |6 A
    ; R: I/ l4 O% u$ [, v8 D

    本帖子中包含更多资源

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

    x
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2017-11-25 15:05
  • 签到天数: 1 天

    [LV.1]10FPS

    发表于 2017-11-25 15:06:30 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    LabVIEW图像处理教程
    机器视觉商城淘宝店铺

    QQ|视觉论坛VISIONBBS.COM|视觉之家VISIONHOME.CN|东莞市华动智能科技有限公司 ( 粤ICP备17078359号-2 )|网站地图

    GMT+8, 2019-9-22 01:07

    Powered by shixinhua.com X3.4

    © 2009-2019 VISIONBBS.COM 浏览量:

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