图像处理 图像花屏算法_uvc图像花屏 - CSDN
精华内容
参与话题
  • 视频花屏分析

    万次阅读 2017-06-01 16:59:17
    1. 前言视频花屏是多媒体工程师最常见的问题之一,也是最棘手的问题之一,笔者此前也数次遇到这样的问题,今天在此总结分享下经验。本文分析的重点是视频录制过程中引起的花屏问题,粗浅涉及视频播放。但是其中都...

    1. 前言

    视频花屏是多媒体工程师最常见的问题之一,也是最棘手的问题之一,笔者此前也数次遇到这样的问题,今天在此总结分享下经验。

    本文分析的重点是视频录制过程中引起的花屏问题,粗浅涉及视频播放。但是其中都不会涉及到编码器或者解码器本身所引起的花屏问题。

    本文所用到的测试资源如下图:
    这里写图片描述


    2. 视频花屏问题定位

    当遇到视频花屏时,首先要定位是最先出现的花屏的是哪个阶段产生的花屏。以视频录制为例,其具体流程如下:

    这里写图片描述

    采集阶段不属于本文分析范畴
    通过使用其它播放器播放视频和检验采集到的原始数据这两种手段可以定位到具体的问题。具体步骤如下:

    Created with Raphaël 2.1.0开始更换播放器是否花屏?渲染数据是否花屏?原始数据是否花屏?采集问题结束渲染问题编码问题播放解码问题yesnoyesnoyesno

    3. 视频花屏三种类型

    常见视频花屏有一下三种原因造成:

    • 渲染脏数据
    • 丢帧
    • 图像格式转换

    3.1 渲染脏数据

    渲染脏数据是还为完成渲染的数据。具体来讲就是在视频帧渲染到一半的时候,即被送到编码器编码。
    此问题发生在视频渲染阶段。

    3.1.1 特征

    (1)图像具有明显的撕裂或者错位特征
    渲染脏数据造成结果就是该图像一半是当前帧的数据,另一半是上一帧的数据
    (2)渲染脏数据通常不会造成持续型的花屏现象
    如下图所示,图片中上下存在明显错位的现象。
    PS:一般脏数据的渲染结果不一定像下图中那么规则。
    这里写图片描述

    3.1.2 产生原因与解决方法

    以笔者经验产生原因有两类:

    • 通过glReadPixels等类似方法从OpenGL获取数据,在draw和glReadPixels中间没有等待绘制完
      解决方法是:在draw和glReadPixels中间调用glFinish方法

      PS:
      (1)不要滥用glFinish方法,该函数会严重影响渲染效率,如果不是立即从GPU中读取数据的话可采用glFlush代替
      (2)glReadPixels非常非常耗时,建议新建一个新的渲染线程,把数据在新线程中重新渲染一遍,然后调用glReadPixels

    • 如果多个渲染线程通过共享纹理的方式串型工作,确认该纹理在多个线程中工作是否互斥行为。
      如前文提到的开辟一个渲染线程专门进行glReadPixels操作,如果有这样类似的行为尽量采用多缓冲机制

      PS:笔者的经验是当存在多个渲染线程

    3.1.3 总结

    解决此问题的方法就是等该帧渲染完成后在捕获渲染后的数据,同时需要注意的性能问题。具体方法有多缓冲:
    (1)加锁
    最简单的方法,但是慎用会影响渲染效率
    (2)多缓冲
    这是必须的
    (3)glFlush/glFinish
    笔者的经验是普通绘制完毕后调用glFlush,在glReadPixels方法前调用glFinish。

    3.2 丢帧

    此处所说丢帧丢弃的是视频编码后的视频帧,通常发生在复用(Mux)阶段。
    由于视频编码后帧之间存在依赖关系,丢帧会带来及其严重花屏效果,并且具有持续性影响。
    此问题发生在视频编码阶段。

    3.2.1 特征

    (1)存粹的花屏,且花屏效果没有明显的规则型(比如撕裂、错位)
    (2)连续多帧存在花屏现象
    如下图所示:
    这里写图片描述

    3.2.2 产生原因与解决方法

    产生原因

    • 视频帧时间戳(PTS)不对
      由于大部分复用器(Muxer)都严格要求视频帧PTS是严格递增的,比如ffmpeg中mp4 Muxer如果当前帧的PTS小于或等于前一帧的PTS,那么该帧就不会被写入文件,ffmpeg会报”Invalid pts”错误。

    • 视频向音频同步引发丢帧

    • 缓冲队列溢出

    解决方法
    引发此问题的原因众多,具体案例具体分析。关键是确认花屏是由于丢帧引起的,以及什么原因引发的丢帧。
    后面介绍几种下视频分析方法,帮助确认丢帧问题。

    3.3 图像格式转换

    在视频编解码中必然会涉及到YUV和RGB图像格式的转换,并且YUV还有多种格式。如果转换格式或者算法不正确也会引发视频花屏问题。
    此问题发生在视频渲染或者播放阶段。

    3.3.1 特征

    由YUV与RGB图像格式转换引发的花屏现象有很多无法判断,但是有一种情况基本可以判定是由于此原因引发的:
    (1)图像的黑白数据是正常的,但是色彩不正常,比如色彩偏色、甚至错乱。
    (2)图像整体依然处于可识别的状态,但是存在明显的彩色斑块
    如下图所示:
    这里写图片描述

    3.3.2 产生原因与解决方法

    产生原因

    • YUV格式错误
      YUV有很多种格式,任意两种之间都都会造成转换出来的图像存在巨大差异。
    • 图片大小
      给格式转换算法设置的宽高和图像本身存在微小差异。

      比如笔者在Android MTK机型上遇到过,MTK为了做GPU数据对其优化,是得GPU产出的图像分辨率和常规分辨率存在微小差距,最后造成图像色彩混乱,修复后还存在绿边问题,需要特色处理。

    • 图像转换算法
      (1)不同的图像制式对应RGB与YUV转换矩阵不同,其转换的色彩也存在偏差。
      (2)目前大部分采用硬件加速的技术(GPU)实现图像格式转换,不同平台可能存在差异。

    解决方法
    首先把YUV数据保存下来,然后用专门的工具对其进行转换,查看转换效果,然后做进一步的分析。
    YUV240P数据如下图所示:
    这里写图片描述

    总结:
    (1)图像的黑白数据是基本正常的,色彩混乱:
    可能是由于错误的图像大小引发,亦可能是由于算法不支持该图像的分辨率引起的
    (2)图像整体依然处于可识别的状态,但是存在明显的彩色斑块
    基本确认是由于错误地识别YUV格式引起的(我很确定地告诉你,你把YUV420P和NV12搞混了)


    4. 视频分析工具与使用

    4.1 视频丢帧分析

    4.1.1 ffprobe

    ffprobe是FFmpeg里面比较重要的一个工具,在此不在多说了。
    (1) 获取帧信息
    ffprobe -show_frames We_Are_Young.mp4 > frames.info
    这里写图片描述
    (2)统计I帧数量
    keyframe=1 : key frame
    pict_type=I : I-frame

    cat frames.info | grep “pict_type=I” |wc -l

    (3)统计视频帧数量
    cat frames.info | grep “media_type=video” |wc -l
    ffprobe -show_format -show_streams filename

    4.1.2 VideoEye

    VideoEye[2]是雷霄骅开发的一款视频分析工具,功能很多,比较强大。
    项目主页
    SourceForge:https://sourceforge.net/projects/videoeye/
    Github:https://github.com/leixiaohua1020/VideoEye
    开源中国:http://git.oschina.net/leixiaohua1020/VideoEye

    具体操作和介绍参见开源实时视频码流分析软件:VideoEye
    下面这张图是视频PTS分析的截图
    这里写图片描述

    4.2 YUV分析

    4.2.1 YUV与RGB格式转换

    (1)视频

    ffmpeg -i VID20160412102008.mp4 -c:v rawvideo -pix_fmt yuv420p out.yuv

    (2)图像

    RGB ==> YUV
    ffmpeg  -i a.bmp -pix_fmt yuv420p -y a.yuv
    
    YUV ==> RGB
    ffmpeg -pix_fmt yuv420p -video_size 352x288 -i a.yuv  -y b.bmp

    4.2.2 YUV预览

    不管用什么工具都必须知道YUV数据的宽高信息,否则无法对YUV数据进行分析。

    ffplay

    ffplay -f rawvideo -video_size 640x480 test.yuv

    mplayer

    mplayer name.yuv -demuxer rawvideo -rawvideo w=352:h=288

    mpv

    mpv VID.yuv --demuxer=rawvideo --demuxer-rawvideo-w=720 --demuxer-rawvideo-h=1280

    GLYUVPlay
    GLYUVPlay是MAC上一款查看YUV数据的工具,官方网站为 http://bax.comlab.uni-rostock.de/en/projects/glyuvplay/
    下面是其截图
    这里写图片描述


    5. 参考文献

    [1] wikipedia YUV
    [2] 开源实时视频码流分析软件:VideoEye

    展开全文
  • 在使用opencv处理视频的过程中,通常我们会读取视频帧,读取出来的视频帧就相当于一幅图像,我们只要读取到了图像就可以对图像进行各种各样的操作。 例如,行人检测,汽车检测这些算法,目前非常火的目标识别算法...

     

    opencv处理视频速度跟不上视频送过来的速度,会导致资源积压!如何设置一个缓冲区,在一定时间里只取最新的资源,剩下资源的清空?

    在使用opencv处理视频的过程中,通常我们会读取视频帧,读取出来的视频帧就相当于一幅图像,我们只要读取到了图像就可以对图像进行各种各样的操作。

    例如,行人检测,汽车检测这些算法,目前非常火的目标识别算法就是yolo3,无论是在速度上还是精度上,yolo3都要比他的前辈,RCNN,FASTRCNN,YOLOv1要好很多。

    但是就算是这样的背景下,我们在实际运用yolo的过程中,也是会遇到这样那样的问题,例如尽管网上对于yolo的速度大加赞赏,但是我在使用过程中,用cpu进行一次80类别数据集的检测却要耗费0.6秒,普通的视频fps大约25-30,对于每帧0.6秒的处理速度来说是远远不够的,那么性能好的gpu呢,在使用gpu的情况下,一次检测也需要将近0.08秒,接近0.1秒,在将算法应用到视频中时,会发现明显的卡顿,但是卡顿都是可以接受的,令人无法接受的是,opencv自带的帧缓冲区,这个就是cap函数读取视频时存放帧的地方,在实测过程中发现,cap函数无法获取最新帧,而是按照cap缓冲区中顺序一帧一帧的读取,这导致了我算法的延时,会导致延时越来越严重,我们期望cap能够跳过算法的处理时间,直接读取当前帧而抛掉算法运行过程中的帧,但是事实显示,opencv并不是这样做的,在和同学的讨论中,一位同学告诉我,cap能够读取当前帧,但是我在实验过程中发现,事实并不是这样,在研究中发现,opencv的确会在一定时间清空帧缓冲区,但这个清空的时机并不是我们能够控制的,也就是说我没有发现一个api可以让我们手动清空帧缓冲区。

    方法一:编写我们自己的帧缓冲区就很重要。

    大致思路就是,创建一个自定义的帧缓冲区,开启一个线程使用cap函数读取视频帧,将读取到的视频帧存入我们自定义的缓冲区,这个缓冲区可以设计成固定大小,每次新增新的帧进入缓冲区,将挤掉旧的帧。代码可以参考:

    class Stack:
     
        def __init__(self, stack_size):
            self.items = []
            self.stack_size = stack_size
     
        def is_empty(self):
            return len(self.items) == 0
     
        def pop(self):
            return self.items.pop()
     
        def peek(self):
            if not self.isEmpty():
                return self.items[len(self.items) - 1]
     
        def size(self):
            return len(self.items)
     
        def push(self, item):
            if self.size() >= self.stack_size:
                for i in range(self.size() - self.stack_size + 1):
                    self.items.remove(self.items[0])
            self.items.append(item)
    另外,开启一个线程,这里用主线程也可以,读取视频缓冲区中的帧并进行算法,然后显示。

    def capture_thread(video_path, frame_buffer, lock):
        print("capture_thread start")
        vid = cv2.VideoCapture(video_path)
        if not vid.isOpened():
            raise IOError("Couldn't open webcam or video")
        while True:
            return_value, frame = vid.read()
            if return_value is not True:
                break
            lock.acquire()
            frame_buffer.push(frame)
            lock.release()
            cv2.waitKey(25)
    def play_thread(frame_buffer, lock):
        print("detect_thread start")
        print("detect_thread frame_buffer size is", frame_buffer.size())
     
        while True:
            if frame_buffer.size() > 0:
                lock.acquire()
                frame = frame_buffer.pop()
                lock.release()
                # TODO 算法
                cv2.imshow("result", frame)
                if cv2.waitKey(1) & 0xFF == ord('q'):
                    break
    主函数可以参考这里:

    from thread import capture_thread, play_thread
    from stack import Stack
    import threading
     
     
    path = ''
    rtsp_url = ''
    frame_buffer = Stack(3)
    lock = threading.RLock()
    t1 = threading.Thread(target=capture_thread, args=(path, frame_buffer, lock))
    t1.start()
    t2 = threading.Thread(target=play_thread, args=(frame_buffer, lock))
    t2.start()
    这样,我们就可以控制自己的帧缓冲区,并且每次处理耗时算法以后,能够获取到最新的一帧进行处理,虽然画面可以能会掉帧的样子,但是不会再有延时的情况。

    后来又在github上,看到一个完整代码,网址如下:https://github.com/cxstdio/pycv4rtsp

    方法二:采用网络摄像头的辅码或者调低摄像的分辨率和图像贞率

    参考资料: https://www.jianshu.com/p/2b79012c0228 验证摄像头分辨率的方法

    展开全文
  • 数字图像处理,图像去噪算法简介

    万次阅读 2016-06-21 17:03:19
    随着各种数字仪器和数码产品的普及,图像和视频已成为人类活动中最常用的信息载体,它们包含着物体的大量信息,成为人们获取外界原始信息的主要途径。

    一,背景

     

    随着各种数字仪器和数码产品的普及,图像和视频已成为人类活动中最常用的信息载体,它们包含着物体的大量信息,成为人们获取外界原始信息的主要途径。然而在图像的获取、传输和存贮过程中常常会受到各种噪声的干扰和影响而使图像降质,并且图像预处理算法的好坏又直接关系到后续图像处理的效果,如图像分割、目标识别、边缘提取等,所以为了获取高质量数字图像,很有必要对图像进行降噪处理,尽可能的保持原始信息完整性(即主要特征)的同时,又能够去除信号中无用的信息。所以,降噪处理一直是图像处理和计算机视觉研究的热点。

    图像视频去噪的最终目的是改善给定的图像,解决实际图像由于噪声干扰而导致图像质量下降的问题。通过去噪技术可以有效地提高图像质量,增大信噪比,更好的体现原来图像所携带的信息,作为一种重要的预处理手段,人们对图像去噪算法进行了广泛的研究。在现有的去噪算法中,有的去噪算法在低维信号图像处理中取得较好的效果,却不适用于高维信号图像处理;或者去噪效果较好,却丢失部分图像边缘信息,或者致力于研究检测图像边缘信息,保留图像细节。如何在抵制噪音和保留细节上找到一个较好的平衡点,成为近年来研究的重点。

     

    二,图像去噪理论基础

     

    2.1 图像噪声概念

    噪声可以理解为“妨碍人们感觉器官对所接收的信源信息理解的因素”。例如,一幅黑白图片,其平面亮度分布假定为f(x,y),那么对其接收起干扰作用的亮度分布R(x,y),即可称为图像噪声。但是,噪声在理论上可以定义为“不可预测,只能用概率统计方法来认识的随机误差”。因此将图像噪声看成是多维随机过程是合适的,因而描述噪声的方法完全可以借用随机过程的描述,即用其概率分布函数和概率密度分布函数。但在很多情况下,这样的描述方法是很复杂的,甚至是不可能的。而实际应用往往也不必要。通常是用其数字特征,即均值方差,相关函数等。因为这些数字特征都可以从某些方面反映出噪声的特征。

     

    2.2 常见的图像噪声

    在我们的图像中常见的噪声主要有以下几种:

    (1),加性噪声

    加性嗓声和图像信号强度是不相关的,如图像在传输过程中引进的“信道噪声”电视摄像机扫描图像的噪声的。这类带有噪声的图像g可看成为理想无噪声图像f与噪声n之和,即:

    image

    (2),乘性噪声

    乘性嗓声和图像信号是相关的,往往随图像信号的变化而变化,如飞点扫描图像中的嗓声、电视扫描光栅、胶片颗粒造成等,这类噪声和图像的关系是:

    image

    (3),量化噪声

    量化嗓声是数字图像的主要噪声源,其大小显示出数字图像和原始图像的差异,减少这种嗓声的最好办法就是采用按灰度级概率密度函数选择化级的最优化措施。

    (4),“椒盐”噪声

    此类嗓声如图像切割引起的即黑图像上的白点,白图像上的黑点噪声,在变换域引入的误差,使图像反变换后造成的变换噪声等。

     

    2.3 图像噪声模型

    实际获得的图像含有的噪声,根据不同分类可将噪声进行不同的分类。从噪声的概率分情况来看,可分为高斯噪声、瑞利噪声、伽马噪声、指数噪声和均匀噪声。它们对应的概率密度函数(PDF)如下

    (1),高斯噪声

    在空间域和频域中,由于高斯噪声在数学上的易处理性,这种噪声(也称为正态噪声)模型经常被用在实践中。高斯随机变量Z的PDF由下式给出:

    image

    其中,z表示灰度值,μ表示z的平均值或期望值,α表示z的标准差。当z服从上述分布时,其值有95%落在[(μ-2σ), (μ+2σ)]范围内。

    (2)脉冲噪声(椒盐噪声)

    (双极)脉冲噪声的PDF可由下式给出:

    image

    如果b>a,则灰度值b在图像中将显示为一个亮点,反之则a的值将显示为一个暗点。若Pa或Pb为零,则脉冲称为单极脉冲。如果Pa和Pb均不可能为零,尤其是它们近似相等时,则脉冲噪声值将类似于随机分布在图像上的胡椒和盐粉微粒。由于这个原因,双极脉冲噪声也称为椒盐噪声。

    (3)瑞利噪声

    image

    其均值和方差分别为:

    image

    (4)伽马噪声

    image

    其密度的均值和方差为:

    image

    (5)指数分布噪声

    image

    其中a>0,概率密度函数的期望值和方差是:

    image

    (6)均匀噪声

    image

    其均值和方差分别为:

    image

     

    2.4 图像去噪算法分类

    (1),空间域滤波

    空域滤波是在原图像上直接进行数据运算,对像素的灰度值进行处理。常见的空间域图像去噪算法有邻域平均法、中值滤波、低通滤波等。

    (2),变换域滤波

    图像变换域去噪方法是对图像进行某种变换,将图像从空间域转换到变换域,再对变换域中的变换系数进行处理,再进行反变换将图像从变换域转换到空间域来达到去除图像嗓声的目的。将图像从空间域转换到变换域的变换方法很多,如傅立叶变换、沃尔什-哈达玛变换、余弦变换、K-L变换以及小波变换等。而傅立叶变换和小波变换则是常见的用于图像去噪的变换方法。

    (3),偏微分方程

    偏微分方程是近年来兴起的一种图像处理方法,主要针对低层图像处理并取得了很好的效果。偏微分方程具有各向异性的特点,应用在图像去噪中,可以在去除噪声的同时,很好的保持边缘。偏微分方程的应用主要可以分为两类:一种是基本的迭代格式,通过随时间变化的更新,使得图像向所要得到的效果逐渐逼近,这种算法的代表为Perona和Malik的方程[27],以及对其改进后的后续工作。该方法在确定扩散系数时有很大的选择空间,在前向扩散的同时具有后向扩散的功能,所以,具有平滑图像和将边缘尖锐化的能力。偏微分方程在低噪声密度的图像处理中取得了较好的效果,但是在处理高噪声密度图像时去噪效果不好,而且处理时间明显高出许多。

    (4),变分法

    另一种利用数学进行图像去噪方法是基于变分法的思想,确定图像的能量函数,通过对能量函数的最小化工作,使得图像达到平滑状态,现在得到广泛应用的全变分TV模型就是这一类。这类方法的关键是找到合适的能量方程,保证演化的稳定性,获得理想的结果。

    (5),形态学噪声滤除器

    将开与闭结合可用来滤除噪声,首先对有噪声图像进行开运算,可选择结构要素矩阵比噪声尺寸大,因而开运算的结果是将背景噪声去除;再对前一步得到的图像进行闭运算,将图像上的噪声去掉。据此可知,此方法适用的图像类型是图像中的对象尺寸都比较大,且没有微小细节,对这类图像除噪效果会较好。

     

    三,几种图像去噪算法介绍

     

    3.1 基于空间域的中值滤波

    中值滤波器是一种常用的非线性平滑滤波器,基本原理是把数字图像或数字序列中一点的值用该点邻域内各点的中值代换。设f(x,y)表示数字图像像素点(x,y)的灰度值,滤波窗口为A的中值滤波器可以定义为:

    image

    当n为奇数时,n个数x1,x2,…xn的中值就是按数值大小顺序处于中间的数;当n为偶数时,我们定义两个中间数平均值为中值。

     

    3.2 基于小波域的小波阈值去噪

    小波萎缩法是目前研究最为广泛的方法,小波萎缩法又分成如下两类:第1类是阈值萎缩,由于阈值萎缩主要基于如下事实,即比较大的小波系数一般都是以实际信号为主,而比较小的系数则很大程度是噪声。因此可通过设定合适的阈值,首先将小于闽值的系数置零,而保留大于闭值的小波系数;然后经过阈值函数映射得到估计系数;最后对估计系数进行逆变换,就可以实现去噪和重建;而另外一种萎缩方法则不同,它是通过判断系数被噪声污染的程度,并为这种程度引入各种度量方法(例如概率和隶属度等),进而确定萎缩的比例,所以这种萎缩方法又被称为比例萎缩。阈值萎缩方法中的两个基本要素是阈值和阈值函数。

    阈值的选择:

    阈值的确定在阈值萎缩中是最关键的。目前使用的阈值可以分成全局阈值和局部适应阈值两类。其中,全局阈值对各层所有的小波系数或同一层内的小波系数都是统一的;而局部适应阈值是根据当前系数周围的局部情况来确定阈值。目前提出的全局阈值主要有以下几种:

    (1),Donoho和Johastone统一阈值(简称DJ阈值):

    其中σ为噪声标准方差,N为信号的尺寸或长度。

    image

    (2),基于零均值正态分布的置信区间阈值:

    image

    (3),Bayes Shrink阈值和Map Shrink阈值。在小波系数服从广义高斯分布的假设下,Chang等人得出了阈值:

    image

    其中,(R为噪声标准方差,RB为广义高斯分布的标准方差值)。

    (4),最小最大化值:这是Donoho和John Stone在最小最大化意义下得出的阈值与上边的阈值不同,它是依赖于信号的,而且没有显式表达式,在求取时需要预先知道原信号。

    (5),理想值:理想阈值是在均方差准则下的最优阈值,同最大最小化阈值一样,也没有显式的表达式,并且这个阈值的计算通常也需先知道信号本身。

    阈值函数:

    Bruce和Gao。提出了一种半软阈值函数:

    image

    该方法通过选择合适的阈值T1和12,可以在软阈值方法和硬阈值方法之间达到很好的折中。另外,zhang等人为了对SIJRE误差准则函数进行基于梯度的优化搜索,提出了另外一种阈值函数,这种阈值函数同上边闭值函数所不同的是它拥有更高的导数阶,故其重建图像更为平滑,但该文作者将去噪效果的提高归功于搜索方法,其实,Donoh。和 Johnstone提出的在当前小波系数集合中,搜索最优阈值的方法,对于当前已经是优的了,由此可见,该去噪效果的提高则应归功于阈值函数的选取。

     

    3.3 基于PDE的图像去噪

    目前,基于PDE的图像处理方法的研究,也是图像去噪的研究热点方向,并且己经取得了一定的理论和实际应用方面的成它的去噪过程为通过建立噪声图像为某非线性PDE的初始条件,然后求解这个PDE,得到在不同时刻的解,即为滤波结果。Perona和Malik提出了基于PDE的非线性扩散滤波方法(以下简称P-M),各向异性的去噪模型根据图像的梯度值决定扩散的速度,使之能兼顾噪声消除和边缘保持两方面的要求。

    以P-M模型为代表的这类方法己经在图像增强、图像分割和边缘检测等领域得到了广泛的应用,取得了很好的效果。

    P-M是一种非线性的各向异性方法,目的是为了克服线性滤波方法存在的模糊边缘和边缘位置移动的缺点。基本思想是:图像特征强的地方减少扩散系数,图像特征弱的地方增强扩散系数。方程如下:

    image

    其中u(x,y,t)是随时间变化的图像,image是梯度的模,image扩散系数函数用于控制扩散速度。理想的扩散系数应当使各向异性扩散在灰度变化平缓的区域快速进行,而在灰度变化急剧的位置(即图像特征处)低速扩散乃至不扩散函数,所以,image应具有如下性质:

    image

    基于以上的两个性质,P-M提出了如下扩散系数函数:

    image

    其中k为边缘阈值,用来判断边缘区域和平坦区域。引入通量函数,主要是为了阐明阈值k在扩散操作中的作用,其函数定义如下:

    image

    尽管P-M方程在抑制噪声与保留图像重要特征方面取得了一定的效果,但却表现出病态且不稳定。Catt等人对该方程进行了改进,他们先用高斯核同图像作卷积,然后取其梯度模作图像边缘信息的估计。文献提出用优化的对称指数滤波器对图像作光滑,然后取其梯度模作图像边缘信息的估计。这两种估计方法的基本思想是降低噪声的干扰,更加真实地提取图像的边缘特征信息,以便利用边缘信息更好地控制P-M方程的扩散行为。

     

    3.4 全变分(TV)图像去噪

    TV方法是由Rudin Osher and Fatemi提出,它基于变分法的思想,确定图像的能量函数,通过对图像能量函数最小化达到平滑去噪的目的。是现在比较流行的图像复原方法。图像的能量函数方程为:

    image

    在文献[2]中给出的全变分去噪能量泛函为:

    image

    为了使得能量函数最小,其欧拉-拉格朗日方程为:

    image

    其中,梯度算子:

    image

    正则项:

    image

    用来减少平坦区域的退化。将整体左边转换成图像中任意像素点中的局部坐标系后,方程可以分解成边缘方向和边缘正交的两个方向,分解后个方向的系数控制着该方向的扩散强度。扩散方向实际上是一个分线性的各向异性的扩散方程,其扩散算子仅沿图像梯度的正交方向扩散,扩散系数为1/|▽μ|,而朝着梯度方向无扩散。这样可以通过图像的梯度来判断边缘位置,使得边缘扩散系数最小,从而降低对边缘的模糊程度,但是也由于边缘的扩散系数小,噪声得不到很好的抑制,而且当|▽μ|>λ的时候,势能函数是非凸的,使得边缘处处理表现不稳定。所以,如何确定扩散参数的值是一个问题。


    四,评价图像质量的客观参数

    客观评价算法根据其对参考图像的依赖程度, 可分成三类。

    (1)全参考:需要和参考图像上的像素点做一一对应的比较;

    (2)半参考:只需要和参考图像上的部分统计特征做比较;

    (3)无参考:不需要具体的参考图像。其中全参考算法是研究时间最长、发展最成熟的部分

    a,PNSR峰值信噪比


    b,ENL等效视数


    c,SNR信噪比


    引用别人的一片博客:

    Lin Zhang等人在论文《A COMPREHENSIVEEVALUATION OF FULL REFERENCE IMAGE QUALITY ASSESSMENT ALGORITHMS》中,比较了几种全参考图像质量评价算法,在此记录一下他们的结果。

    下表所示是他们所用的图像库,包含了:TID2008databaseCSIQ databaseLIVEdatabaseIVCdatabaseToyama-MICTdatabaseCornell A57 database,以及 WirelessImaging Quality database (WIQ)。从上到下数据库的规模依次下降。


    一共比较了如下所列的全参考图像客观质量评价算法:

    PeakSignal to Noise Ratio(PSNR)

    峰值信噪比。

    noise quality measure (NQM) index

    参考文献:N. Damera-Venkata, T.D. Kite, W.S. Geisler, B.L. Evans, and A.C.Bovik, “Image quality assessment based on a degradation model,” IEEE Trans. IP,vol. 9, pp. 636-650, 2000.

    universal quality index (UQI)

    参考文献:Z. Wang and A.C. Bovik, “A universal image quality index,” IEEE SignalProcess. Lett., vol. 9, pp. 81-84, 2002.

    structural similarity (SSIM) index

    参考文献:Z. Wang, A.C. Bovik, H.R. Sheikh, and E.P. Simoncelli,”Image qualityassessment: from error visibility to structural similarity,” IEEE Trans. IP,vol. 13, pp. 600-612, 2004.

    multi-scaleSSIM (MS-SSIM) index

    参考文献:Z. Wang, E.P. Simoncelli, and A.C. Bovik, “Multi-scale structuralsimilarity for image quality assessment,” ACSSC’03, pp. 1398-1402, 2003.

    information fidelity criterion (IFC) index

    参考文献:H.R. Sheikh, A.C. Bovik, and G. de Veciana, “An information fidelitycriterion for image quality assessment using natural scene statistics,” IEEETrans. IP, vol. 14, pp. 2117-2128, 2005.

    visual information fidelity (VIF) index

    参考文献:H.R. Sheikh and A.C. Bovik, “Image information and visual quality,”IEEE Trans. IP, vol. 15, pp. 430-444, 2006.

    visual signal to noise ratio (VSNR) index

    参考文献:D.M. Chandler and S.S. Hemami, “VSNR: a wavelet-based visualsignal-to-noise ratio for natural images,” IEEE Trans. IP, vol. 16, pp.2284-2298, 2007.

    information content weighted SSIM (IW-SSIM) index

    参考文献:Z. Wang and Q. Li, “Information content weighting for perceptualimage quality assessment,” IEEE Trans. IP, vol. 20,

    pp. 1185-1198, 2011.

    Riesz transforms based feature similarity (RFSIM) index

    参考文献:L. Zhang, L. Zhang, and X. Mou, “RFSIM: a feature based imagequality assessment metric using Riesz transforms,” ICIP’10, pp. 321-324, 2010.

    feature similarity (FSIM) index

    参考文献:L. Zhang, L. Zhang, X. Mou, and D. Zhang, “FSIM: a feature similarityindex for image quality assessment,” IEEE Trans. IP, vol. 20, pp. 2378-2386,2011.

     

    统计了每种全参考图像质量评价算法的客观值和主观值之间的相关系数:

    斯皮尔曼秩相关系数(Spearman rankorder correlation coefficient,SROCC),肯德尔秩次相关系数(Kendallrank-order correlation coefficient,KROCC),皮尔森线性相关系数(Pearsonlinear correlation coefficient,PLCC)。客观算法的结果和主观评价的结果相关性越高,则以上三个系数的值越接近于1,说明算法越准确。由表可见,FSIM算法的准确度相对来说是最高的,三个系数的取值分分别达到了0.9094,0.7409,0.9050。


    下表将上表的数值进行了一下排名。排在前面的有FSIM,IW-SSIM,RFSIM,MS-SSIM。猛然发现:PSNR真的是好不准啊~~

    下表反映了每种全参考质量评价算法的耗时,耗时越短,说明算法速度越快。


    总体说来FSIM,IW-SSIM,RFSIM这三种比较新的图像质量评价算法准确性比较高




    五,总结

    随着科技的发展和工作生活的需要,数字图像滤波应用将越来越广泛,要求也将越来越高。到目前为止,仍有很多去噪方面的新思想、新方法出现,不断的充实图像去噪方法。而且,噪声的研究范围也在不断扩大,由高斯噪声到非高斯噪声。去噪技术有很广泛的应用和研究的前景,而且,研究领域也在不断的拓展。

    本文主要的内容是对图像的去噪技术做一个简单的介绍。全文对图像去噪技术进行了概述,包括噪声的概念和去噪原理,并对一些基本的图像去噪方法做了介绍。由于时间关系,并且这是导论课程的论文作业,就没有进行深入细致的研究。

     

    参考文献

    [1] GonzalesRC,WoodsRE.DigitalImageProeessing,SeeondEdition Beijing Eleetronieand Industrial Press,2002

    [2] Leonid I. Rudin 1, Stanley Osher and Emad Fatemi Nonlinear total variation based noise removal algorithms 1992

    [3] W.Luo,An efficient detail preserving approach for removing impulse noise in images,IEEE Signal Proeess.Lett.,2006,13(7):413-416.

    [4] http://blog.csdn.net/coloriy/article/details/46532171

    展开全文
  • 图像增强-图像锐化

    千次阅读 2014-12-18 20:56:06
    图像锐化主要影响图像中的低频分量,不影响图像中的高频分量。 图像锐化的主要目的有两个: 1.增强图像边缘,使模糊的图像变得更加清晰,颜色变得鲜明突出,图像的质量有所改善,产生更适合人眼观察和识别的...

    图像锐化主要影响图像中的低频分量,不影响图像中的高频分量。

    图像锐化的主要目的有两个:

    1.增强图像边缘,使模糊的图像变得更加清晰,颜色变得鲜明突出,图像的质量有所改善,产生更适合人眼观察和识别的图像;

    2.希望通过锐化处理后,目标物体的边缘鲜明,以便于提取目标的边缘、对图像进行分割、目标区域识别、区域形状提取等,进一步的图像理解与分析奠定基础。

    图像锐化一般有两种方法:

    1.微分法

    2.高通滤波法

    这里主要介绍一下两种常用的微分锐化方法:梯度锐化和拉普拉斯锐化。

    注意:由于锐化使噪声受到比信号还要强的增强,所以要求锐化处理的图像有较高的信噪比;否则,锐化后的图像的信噪比更低。

     

    1.梯度锐化

    基本理论

    邻域平均法或加权平均法可以平滑图像,反过来利用对应的微分算法可以锐化图像。微分算法是求信号的变化率,有加强高频分量胡作用,从而使图像轮廓清晰。

    由于图像模糊胡实质是图像受到平均或积分运算造成的,所以为了把图像中任何方向伸展的边缘肯模糊的轮廓变得清晰,可以对图像进行逆运算如微分运算,从而使图像清晰化。

    在图像处理中,一阶微分是通过梯度算法来实现的,对于一幅图像用函数f(x,y)表示,定义在f(x,y)在点(x,y)处的梯度是一个矢量,定义为:

    捕获

    梯度的方向在函数f(x,y)最大变化率的方向上,梯度的幅度G[f(x,y)]可以由以下公式算出:

    捕获

    由上式可知:梯度的数值就是f(x,y)在其最大变化率方向上的单位距离所增加的量。

    对于数字图像而言,微分可用差分来近似。因此上式可以写成:

    捕获

    为了便于编程和提高运算速度,在计算精度允许的情况下,可采用绝对差算法近似为:

    捕获

    这种算法又称为水平垂直差分法,另一种梯度算法是交叉的进行查分计算,称为罗伯特梯度法,表示为:

    捕获

    同样可采用绝对差算法近似:

    捕获

    运用上述两种梯度近似算法,在图像的最后一行后最后一列无法计算像素的梯度时,一般用前一行或前一列的梯度值近似代替。

    为了不破坏图像背景的前提下更好地增强边缘,也可以对上述直接用梯度值代替灰度值的方法进行改进,可以引入一个阈值来判断是否对某一像素点进行锐化。具体公式如下:

    捕获

    对于图像而言,物体与物体之间,背景与背景之间的梯度变化很小,灰度变化较大的地方一般集中在图像的边缘上,也就是物体和背景交接的地方。当我们设定一个阈值时,G[f(i,j)]大于阈值就认为该像素点处于图像的边缘,对结果加上常数C,以使边缘变亮;而对于G[f(i,j)]不大于阈值就认为该像素点为同类像素,即同为物体或同为背景,常数C的选取可以根据具体的图像特点。这样既增亮了图像的边界,同时又保留了图像背景原来的状态,比传统的梯度锐化具有更好的增强效果和适用性。

    另外拉普拉斯算子也可用于图像锐化,这里不再赘述。

    算法实现:

    ******************************************************************************************************************************************

    红:数字图像处理视频教程(两部)

    {中科院版36讲视频教程 + 电子科大版70讲视频教程(冈萨雷斯 第二版)}
        橙:halcon软件、halcon软件手把手教破解视频教程
        黄:数字图像模式识别demo(C++编写,在公司也是用C++哦)
        绿:halcon软件视频教程、halcon软件在vs2010中配置
        青:面向对象C++视频教程
        蓝:MFC C++视频教程
        紫:海量相关文档资料
        http://item.taobao.com/item.htm?spm=a1z10.3.w4002-9510581636.11.VUYzOY&id=43025290175

    ******************************************************************************************************************************************


    /*************************************************************************
    * 函数名称:
    *   GradSharp()
    * 参数:
    *   BYTE  bThre        - 阈值
    * 返回值:
    *   BOOL            - 成功返回TRUE,否则返回FALSE。
    * 说明:
    *   该函数用来对图像进行梯度锐化,设定梯度锐化的阈值为30
    /************************************************************************/
    void CImgEnhance::GradSharp(unsigned char Thre)
    {
           unsigned char*    pSrc;       // 指向源图像的指针
        unsigned char*    pDst;     
        unsigned char*    pSrc1;
        unsigned char*    pSrc2;    
        LONG    i,j;                // 循环变量
        int    bTemp;
        if(m_pImgDataOut != NULL)
        {
            delete []m_pImgDataOut;
            m_pImgDataOut = NULL;
        }
        
        if(m_nBitCount != 8)
        {
            AfxMessageBox("只能处理8位灰度图像!");
            return ;
        }
           int lineByte = (m_imgWidth * m_nBitCount / 8 + 3) / 4 * 4;


        //创建要复制的图像区域
        m_nBitCountOut = m_nBitCount;
        int lineByteOut = lineByte;
        if (!m_pImgDataOut)
        {
            m_pImgDataOut = new unsigned char[lineByteOut * m_imgHeight];
        }
        
        int pixelByte = m_nBitCountOut / 8; // 此处实际就是1,因为只处理8位图像
        for(i = 0; i < m_imgHeight; i++)
        {
            for(j = 0; j < m_imgWidth * pixelByte; j++)
                *(m_pImgDataOut + i * lineByteOut + j) = *(m_pImgData + i * lineByteOut + j);
        }
        
        for(i = 0; i < m_imgHeight; i++)        // 每行
        {        
            for(j = 0; j < m_imgWidth; j++)        // 每列
            {
                    //指向新DIB第i行第j列的像素的指针
                pDst = m_pImgDataOut + lineByte * i + j;
                
                // 进行梯度运算
                // 指向DIB第i行,第j个象素的指针
                pSrc  = (unsigned char*)m_pImgData + lineByte * i + j;            
                // 指向DIB第i+1行,第j个象素的指针
                pSrc1 = (unsigned char*)m_pImgData + lineByte * (i+1) + j;            
                // 指向DIB第i行,第j+1个象素的指针
                pSrc2 = (unsigned char*)m_pImgData + lineByte * i + j + 1; 
                bTemp = abs((*pSrc)-(*pSrc1)) + abs((*pSrc)-(*pSrc2));
                
                // 判断是否小于阈值
                if ((bTemp+120) < 255)
                {
                    // 判断是否大于阈值,对于小于情况,灰度值不变。
                    if (bTemp >= Thre)
                    {
                        *pSrc = bTemp + 120;
                    }
                }
                else
                {
                    *pSrc = 255;
                }
                //生成新的DIB像素值
                *pDst = *pSrc;
            }
        }
        
    }

    展开全文
  • sobel算子原理

    千次阅读 2015-01-07 14:53:09
    sobel算子:是一阶微分算子(离散差分算子),利用临近(上下、左右)的像素值来计算当前像素值,然后在根据阈值来取舍。幅值公式为 适当选取阈值T,若S(x,y)>T则(x,y)点为阶跃的边缘点。 sobel卷积因子如下:
  • 视频压缩基本概念

    千次阅读 2018-08-21 09:28:09
    视频压缩基本概念 为什么需要压缩视频 首先回答why这个问题。 假设一个2小时未压缩的高清视频,1920×1080p的电影,我们来计算一下他的存储容量。先介绍一下帧率(frame rate或者是 FPS)概念,也就是每秒传输图片的...
  • 无人机开发-图传技术浅析

    千次阅读 2018-02-15 21:44:28
    2016年,是中国无人机市场的元年,无人机能够一跃进入大众视野,并迅速在大众市场火热发展,是很多人始料未及的。从刚开始的空中摄录,...专业的航空航天器并没有独立的视频图像传输设备。图传的概念只存在于消费类...
  • H264的基本原理

    万次阅读 2020-05-19 21:04:41
    H264 视频格式是经过有损压缩的,但在技术上尽可能做的降低存储体积下获得较好图像质量和低带宽图像快速传输。 H264压缩技术主要采用了以下几种方法对视频数据进行压缩。包括: 帧内预测压缩,解决的是空域数据...
  • 1、前言视频花屏是多媒体工程师最常见的问题之一,也是最棘手的问题之一,笔者此前也数次遇到这样的问题,今天在此总结分享下经验。本文分析的重点是视频录制过程中引起的花屏问题,...
  • H264学习笔记(2):H264编码器

    千次阅读 2015-12-17 15:09:50
     H264为了提高预测精度,编码器可以从一组前面或后面已编码图像中选出一个或两个与当前最匹配的图像作为帧间编码间的参数图像,这样一来复杂度大大增加,但多次比较结果使匹配后的预测精度显著改进,H264最多可以从...
  • CMOS Sensor的调试经验分享

    万次阅读 多人点赞 2014-07-15 15:49:02
    转自:http://bbs.52rd.com/forum.php?mod=viewthread&tid=276351
  • 写作背景:最近在研究H264编码器的参数,里面的参数不太懂,其中包括: 1) 30 # i intervals // I 帧间距 2)30 # idr intervals// idr帧间距 3) 0 # b frame number between 2 p-frame(0, 1, 2) ...
  • 本设计基于linux操作系统,由客户端(门禁设备)和服务器(后台处理中心)组成,通过以太网形成组网,实现一个人脸识别门禁系统。客户端为嵌入式Linux设备,采用QT库显示界面,通过摄像头采集图像。服务器为PC上 ...
  • 「马赛克」被很多人称为是一种罪恶的发明,除了应用在某种不可明说的场景中,在直播过程中的马赛克却有很多技术原因,这篇文章将全方位为你解决直播中的「下马」问题。继《直播技术详解》系列文章之后,我们推出了这...
  • 手机摄像头技术

    千次阅读 2016-06-20 16:36:37
    f值越小,光圈越大,图像性能越好。暗光环境下,光圈大的镜头拍的清楚。 2、快门速度,这一点要自己体验 3、像素值其实没用,放大后噪点很多。手机摄像头的感光元件面积很小。 1600w像素数码相
  • “I帧”和“帧间距”等的理解

    千次阅读 2017-04-07 13:52:42
    1) 30 # i intervals // I 帧间距 2)30 # idr intervals// idr帧间距 3) 0 # b frame number between 2 p-frame(0, 1, 2) 4). 0 # min qp //最小量化步长 5). 51 # max qp//最大量化...7) 30
  • LCD(Mipi) 调试流程及问题归纳

    万次阅读 2017-01-20 09:37:43
    目录 目录调试流程设置 dts 中的参数 并 配置管脚背光部分 LCD 初始化序列 cmds ...8 位16位显示偏移图像位置偏差白屏屏在进出睡眠或者显示过程中白屏花屏屏幕闪烁屏幕抖动屏幕闪动唤醒闪屏问题屏幕唤醒显示灰色底面
  • 一个自拍app,如何获取我们的surface view的截屏?在Camera的onPreviewFrame回调中(继承的PreviewCallback接口)。我们可以获取到data数组,里面存放着就是实时的图片data数组转文件为null,且转bitmap也为null...
  • 手机摄像头介绍及其参数配置

    千次阅读 2012-03-07 20:48:34
    手机摄像头基础知识 ... ...作为手机新型的拍摄功能,内置的数码相机功能与我们平时所见到的低端的(10万-130万像素)数码相机相同。与传统相机相比,传统相机使用“胶卷”作为其记录信息的载体,而数码摄像头的...
  • 数字视频编解码基础

    千次阅读 2015-03-07 17:32:48
    1. 绪论 人类社会的三大支柱是物质、能量和信息。...网络和移动网络中的处理和传输成为了当前我国信息化中的热点技术,数字视频技术在通信和广播领域获得了日益广泛的应用。视频信息具有直观性、确切性、高效性、广泛
1 2 3 4 5 ... 20
收藏数 587
精华内容 234
关键字:

图像处理 图像花屏算法