2016-07-11 15:46:36 Image_test 阅读数 9542

视觉信息是人类获取信息的最主要途径,它通过人自身的视觉感知系统获取,其中图像信息是最主要的组成部分。随着个人计算机、数字通信、多媒体和网络技术的发展,数字图像和数字视频日益成为信息最重要的载体之一,已经深入到人们的日常生活,普及到千家万户。在数字图像的获取、处理、编码、存储、传输和重建的每一个步骤中,通常都会对图像的质量产生影响,如何评价图像质量成为图像处理、计算机视觉领域的一个基本而又富有挑战的问题。

目前,图像质量评价从方法上可分为主观评价方法和客观评价方法,前者凭借实验人员的主观感知来评价对象的质量;后者依据模型给出的量化指标,模拟人类视觉系统感知机制衡量图像质量。下面,就由英迈吉影像质量评测实验室为大家详细讲解一下这两个图像质量评价方法的区别和特点。

一、主观评价

主观质量评分法是图像质量最具代表性的主观评价方法,它通过对观察者的评分归一化来判断图像质量。而主观质量评分法又可以分为绝对评价和相对评价两种类型。

绝对评价是将图像直接按照视觉感受分级评分,表 1.1 列出了国际上规定的 5 级绝对尺度,包括质量尺度和妨碍尺度。对一般人来讲,多采用质量尺度;对专业人员来讲,则多采用妨碍尺度。 

表 1.1  绝对评价尺度


相对评价是由观察者将一批图像从好到坏进行分类,将它们相互比较得出好坏,并给出相应的评分。相对尺度如表 1.2 所示。

表 1.2  相对评价尺度与绝对评价尺度对照

成像质量相对评价
    

评价的结果可用一定数量的观察者给出的平均分数求得。平均分数按照公式 计算得到:

                           

式中, 为图像属于第 i 类的分数, 为判定该图像属于第i类的观察者人数。为了保证图像主观评价在统计上有意义, 参加评分的观察者至少应有 20 名, 其中包括一般观察者和专业人员。  

图像质量的主观评价方法的优点是能够真实的反映图像的直观质量,评价结果可靠,无技术障碍。但是主观评价方法也有很多缺点,如需要对图像进行多次重复实验,无法应用数学模型对其进行描述,从工程应用的角度看,耗时多、费用高,难以实现实时的质量评价。在实际应用中,主观评价结果还会受观察者的知识背景、观测动机、观测环境等因素的影响。此外,主观质量评价无法应用于所有场合,如需要进行实时图像质量评价的领域。

一、客观评价

图像质量的客观评测是根据人眼的主观视觉系统建立数学模型,并通过具体的公式计算图像的质量。相比主观评测,客观评价具有可批量处理、结果可重现的特点,不会因为人为的原因而出现偏差。

一般来说,图像质量客观评价会分成九个评测项目,曝光、清晰度、颜色、质感、噪音、防手抖、闪光灯、对焦和伪像,每一个评测项目往往还会分成好几个评测小项目,如伪像就要测试锐化、畸变、暗角这些项目。通过测试这些项目,通过科学的计算,可以非常直观地看到图像的性能的各个方面的表现有何不足。

下面,我以我们做的《用数据说话-主流行车记录仪图像质量剖析》报告为例,要做好行车记录仪的图像质量客观评测就需要对以下这些项目进行测试。


    

那么这些项目是怎么测的呢?答案是:光源+测试卡+软件。

众所周知的是,我们之所以能看到物体,那是因为外界物体发出的光或反射物体的光,我们才能看物体。所以,我们在测试图像质量的时候我们就会采用各种各样的灯源模拟各种光照环境,如室外明亮环境、夜晚昏暗环境等等,测试图像在这些光照环境下的表现。

光源的选择非常多,如日本京立的LV-9500就是最被广泛使用的光源之一,可以被用在相机、单反、手机、行车记录仪等的图像质量测试。

测试卡的类型和功能也是非常的多,有分辨率测试卡、灰阶测试卡、MTF测试卡等等,根据不同的测试项目选择合适的测试卡。

测试软件系统比较少,在国际上比较有名的是Imatest和DxO Analysis,两个软件系统相比较,DxO测试的项目更多,结果也会更加稳定一些。

总结:

以上就是图像质量评价的两个方法的基本介绍。总的来说,主观评测和客观评测各有利弊,我们评测图像的时候,应该结合两者才不失偏颇,结果也会更加科学。如果你对图像测试感兴趣,请关注我们的后续文章。


2019-07-20 07:51:19 demongwc 阅读数 51

一、课程背景

数字图像处理技术的发展涉及信息科学、计算机科学、数学、物理学以及生物学等学科,因此数理及相关的边缘学科对图像处理科学的发展有越来越大的影响。近年来,数字图像处理技术日趋成熟,它广泛应用于空间探测、遥感、生物医学、人工智能以及工业检测等许多领域,并促使这些学科产生了新的发展。

图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。随着科学技术的发展,数字图像处理技术的应用领域也将随之不断扩大。

正因为图像处理在社会生活中有着越来越重要的作用,这也就体现了我们学习这门课程的必要性。而通过课程的学习可以让我们掌握一些图像处理的初步技术,从而为 今后在图像处理的学习方面打下了基础。

二、课程选题

由于老师并没有做出规定去做哪一道题目,这给了我们很大程度上的自主性。我根据自身的情况和能力,选择了经典的几种边缘检测算子的特点的比较这个题目,和图象的平移和镜像,又因为在计算机图形学这门课中有讲到图片相加的具体程序,在这里图简单做一下颜色取反。通过对这些算法的编写,更加深入地了解了图像处理的过程,并且也在一定程度上提高了自己的编程能力。

边缘检测技术是所有基于边界分割的图像分析方法的第一步,首先检测出图像局部特性的不连续性,再将它们连成边界,这些边界把图像分成不同的区域,检测出边缘的图像就可以进行特征提取和形状分析。为了得到较好的边缘效果,现在已经有了很多的边缘检测算法以及一些边缘检测算子的改进算法。但各算子有自己的优缺点和适用领域。基于以上理由,在此对学到的一些一些经典边缘检测算子进行实际编程验证,以便实际应用中更好地发挥其长处。

三、设计思想

拉普拉斯算子

拉普拉斯算子是二阶微分算子,其差分的表示形式如下:

点击此处下载文档和源码

 

2019-09-22 13:03:07 luobing4365 阅读数 39

(请保留-> 作者: 罗冰)

PhotoShop和ACD See中,有各种对图像进行特效处理的功能,我在大学的时候就很着迷,一度考虑报考图像处理相关的研究生专业。

可惜生活总是变幻无常,推着我走向了另外一条道路,曾经的梦想还没出航就搁浅了。

不过这也影响了我之后的编程生涯,在底层开发的时候,总想着搞清楚各种图像的特效是怎么实现的。

这次准备拿UEFI App来开刀。

灰度转换

先上效果图:

图1 灰度化图像效果图

 

函数实现在/Window.c中。后续所有的特效实现函数,都在这个文件中。

实现灰度效果的函数为TransferToGray(),它可以对指定范围的屏幕图像进行灰度处理。其公式为:灰度值=0.3x红色分量  + 0.59x绿色分量 + 0.11x蓝色分量。我为了计算简单,做了一些修改,公式改为:灰度值=0.25x红色分量  + 0.5x绿色分量 + 0.125x蓝色分量,这个公式可以用移位计算实现。

针对每个颜色像素进行上述计算,然后将灰度值填入各个RGB分量,也是就是说各个分量的值相同,效果就完成了。

镜像显示

代码中实现了三种镜像效果:上下颠倒、左右颠倒、上下左右同时颠倒:

图2 镜像效果

 

实现镜像效果的函数为ReviseImage(),对屏幕上指定范围的图像进行镜像处理。原理上比较直白,将屏幕上指定矩形范围的图像读入缓冲区,并对缓冲区进行数据变换,以实现镜像效果。

设立目的缓冲区,将源缓冲区的最后一行拷贝到目的缓冲区的第一行;源缓冲区的倒数第二行拷贝到目的缓冲区第二行…依次进行操作,可以实现上下颠倒的镜像效果。

左右颠倒有点类似,只是对列进行操作了。

原理上不难,需要注意的是所使用的函数CopyMem,其原型在BaseMemoryLib.h中,类似于C语言库函数的memcpy。缓冲区的大小要由程序员来保证足够,注意不要溢出。

透明特效

第一次从WinXP转到Win7的时候,被透明的图标效果惊艳不已。随后似乎是一夜之间,所看到的的操作系统都有了类似的效果。甚至有人模仿Aero,在WinXP上做了类似的桌面效果。

现在是Win10的时代,似乎周边可见的操作系统,包括ios、andriod、各种Linux发行版,都是透明的图标。这种若隐若现的效果,似乎满足了人类内心深处的某种癖好,现在成了各种软件的标配。不过…确实好看。

试着实现这种效果:

图3 透明效果

 

之前的鼠标GUI程序构建中,鼠标的图标已经使用了这种效果了。

实现此效果的函数为AlphaTransparent()。它将图像缓冲区*ImagePointer所指向的图像,以透明度Alpha(0-16,值越大,透明度越小)显示在指定区域。

其公式为:颜色分量=(屏幕颜色分量*(16-Alpha)+覆盖图像颜色分量*Alpha)/16。如果需要更细致的透明效果,把Alpha再弄大写就可以了。

显示清屏之拉幕效果

后续的几个图像特效依赖于Graphic.c下的putPartRectImage()函数,它实现了对给定图像的部分显示。也即给定图像缓冲区BltBuffer,对其中的子矩形区域进行显示。采用了Blt()的显示子矩形功能,注意其最后一个参数是以字节为单位的,具体可以参考UEFI Spec。

效果图:

图4 拉幕效果演示

 

代码不解释了,实际上用个for循环就实现了,逻辑很简单。

5 显示清屏之落雨效果

这个效果,不是特别喜欢,主要是图像会被拉长。看每个人的喜好了:

图5 落雨特效

 

实现的函数为RainFallShow()和RainAscendShow(),见源文件Window.c。图中使用的是RainFallShow(),特效时间太长,Gif很难压缩在2M以内,只能截取部分时长来演示了。

代码粗糙得很,应该想办法解决图像拉长的问题,留待后续吧。

显示清屏的其他特效

后面的特效都不解释了,代码都不复杂,主要看看效果吧。

百叶窗特效,函数hWindowShadesShow()和vWindowShadesShow():

图6 百叶窗特效

 

扩散收拢特效,函数为CornerToCenter()与CenterToCorner()。这两个函数属于半完成状态,程序还是比较粗糙。测试中发现,显示Jpeg的函数有些问题,当图像高度大于宽度时不显示。很可能是ffjpeg内部的问题,留到以后再研究吧。

图7 扩散收拢特效

 

交错展现特效。使用的函数为hInterlaceShow()和vInterlaceShow(),分别为水平交错的特效和垂直交错的特效。两个特效都比较费时间,所以只截取了水平交错特效的动图:

图8 水平交错特效

 

交错互补特效。使用的函数为hInteractiveShow()和vInteractiveShow(),与上面的特效有点类似。

图9 交错互补特效

 

总结一下,所有显示清屏特效,都是以一定的规律显现图像的一部分。所需要考虑的,在循环完成后,图像缓冲区应该遍历完成。

这几个特效编写得比较仓促,有很多地方没有考虑完整,包括是否遍历完、显示速度等等。可以参照这些代码,编写其他的各种特效,比如马赛克、雾化特效等。

在代码中,还涉及到延时问题。我所用的是Boot Service中的Stall()来延时,以ms为单位。不过,在实际运用在Option ROM的开发中,发现这个函数的延时时长不是所要求的ms,有长有短。

我没有搞明白问题出在哪儿。因此,在产品商用化中,涉及到延时的特效,都没有启用。

螺旋特效

其实这也属于显示清屏的特效之一,只是它所使用的底层显示函数与上面的有点不同。上面的是以块为显示的底层函数putPartRectImage(),而这个特效使用的是putImagLine(),以线段为单位。

图10 螺旋展示

 

所使用的函数为SpiralShow()与SpiralShowClear(),定义于Window.c中。美中不足的是,速度有点慢。如何加快显示速度,是个值得研究的课题。

从方向上来说,我觉得可以好好研究下Spec中Blt()函数的实现,核心点仍旧是减少显存换页。

以putImageLine()为基础,还能实现更多的特效,比如风扇状显现、射线状显现等。时间原因,就不再编写代码了。

另外,实际上还可以构建以圆为基础的putImageCircle(),实现圆为基础单位的显现和清除。总觉得这样下去会没完没了,到此为止吧—虽然很有趣。

8 渐隐和渐显效果

最后一个效果,是很久以前编写好的,让图像逐渐从暗到明的显现以及反过来,逐渐消失。

图11 渐隐效果

 

渐隐渐显的效果是很久以前编写的代码,分别为SmoothInZone()和SmoothOutZone(),只针对屏幕指定区域进行操作。这两个函数的局限性比较大,通用性不怎么好。理论上应该对指定的图像缓冲区进行操作,并显示到屏幕上。

那时没有这么写,应该是因为刚接触UEFI图形显示,还没整体思考好如何构建代码。对比现在写的代码和之前写的代码,也能看出来之前考虑不够全面。最突出的问题是通用性考虑以及跨屏截断的问题(Blt()内部可能已经解决截断问题,我不大确定),有机会再全部推倒重写吧。

我的想法

在UEFI下把这些特效全部展示出来,在开始刚学UEFI的时候就有这样的想法了。可惜项目比较紧,而UEFI的开发,除了在联想的双机项目以及UEFI Option ROM外,公司其他产品用不上。就这么一直耽搁下来了,这次算是实现了一个当初的小目标了。

除去对UEFI提供的protocol的理解外,特效的实现还有两个制约因素:一是图形显示的速度;二是准确的延时。

我在前面说过,实际测试中发现,延时时间没有按照想象的运作。我目前没有花时间去了解UEFI的时间中断是怎么实现的,为什么会产生这样的结果?这是一个小课题,值得研究一下。

另外一个是图形显示的速度。我还是觉得与显存的换页有关系,程序应该符合奥姆剃刀原则:如非必要,勿增实体。在没必要的情况下,不应该去换页。但我不确定Blt()内部是怎么实现的,这是另一个小课题。

10 皮一下,很开心

女儿三岁的时候,我在编程,她在旁边玩玩具。为了逗她,我用之前编好的几个函数,做了一个小动画。把以前的代码移植过来,还能运行得不错:

图12 Just For Fun

 

百度云链接:https://pan.baidu.com/s/1gccSosw8_UAGTI5gZPnLCA
提取码:dx23
文件在 22 ImageEffect 下

2017-12-10 10:10:39 qq_35539135 阅读数 501

作品简介

该程序是一款用于扫描图像的小工具
扫描是一种图像处理技术,生活中时常会用到扫描的技术,比如你获奖了,奖状到达学校第一时间是拿到学校扫描备案才会发给你,公司,印务店等也都会经常用到扫描工具,还有你扫二维码时都会使用到扫描技术

我们的最终目标就是将一个图片中我们需要的那部分独立扫描出来,就是扣图!!!

要扫描图像我们肯定是想获取对我们有用的信息内容,然而图像中难免存在许许多多无关信息,甚至可能影响我们处理图片,接下来我会一步一步根据我们需求(提取图片中的黑桃A)将程序一步步剖解开分析,首先放原图


原图

这里写图片描述

1.
图像中包含的信息量非常非常庞大,但对我们有用的其实并不多,怎样才能抛开对我们没用的信息呢?灰度图是图像处理技术中非常常见的一种技术,我们可以形象的将彩图理解为一个3*二维的矩阵形式,分别是R(红)G(绿)B(蓝),而灰度图把白色(255,255,255)与黑色(0,0,0)之间按对数关系分为若干等级,称为灰度,在灰度图中,我们便不再关心RGB,而只需要关注灰度,此时信息量就减少了很多了

灰度图

这里写图片描述

2.
噪声对人的影响噪声可以理解为“ 妨碍人们感觉器官对所接收的信源信息理解的因素”。而图像中也存在各种妨碍人们对其信息接受的因素,于是便引入了一个叫“图像噪声”的概念,消除噪声的方式便是使用滤波器,这里我使用的是一种称为“高斯滤波器”的技术,高斯滤波器技术的核心是对整幅图像进行加权平均,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。接下来本来应该到了轮廓提取环节的,但经过我的实践我发现有时候提取出来的图片会因为亮度原因导致有些地方的灰度区分不明显,而提取轮廓的核心就是边缘检测,图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘。此时就需要一种形态学操作:膨胀。膨胀是对白色部分(高亮部分)而言的,它使图像中的高亮部分进行膨胀,形象的理解为“领域扩张”,效果图拥有比原图更大的高亮区域。(同时膨胀也有一定的去噪效果)

去噪膨胀后的图

这里写图片描述

3.
接下来就是上面所说的轮廓提取了,提取出来的轮廓就是图像中的各种信息的“领域”

轮廓提取图

这里写图片描述

4.
通常情况来说我们要提取的信息同时也是整个图像中“领域”最大的那部分信息,于是我根据轮廓图选择面积最大的那块,也就得到了我们需要的黑桃A的“领域”

黑桃A轮廓

这里写图片描述

5.
刚刚做的每一步都筛掉了对我们没用的信息,就剩了我们要的那部分的一个轮廓了,现在来想想,我们要把这部分内容扣出来,扣出来是什么样子呢?就是将这部分变成一个独立的图片!图片都是方形的对吧,所以我们需要确定扣出来的图片的长和宽,长和宽需要怎么获取呢?当然我们需要定位它的4个顶点,顶点怎么获取呢?很不幸,要在一个点集中直接确定它的四个顶点很不容易,但是,上帝为你关上了一扇门就会为你开一扇窗,opencv视觉库中提供了一个提取线段的函数,它的核心是霍夫曼变换。提取出了4条线段后我门就可以根据两两间的交点确定4个顶点的位置了,当然确定4个点后,四个点连成的图像并非是标准的矩形,并且我们并不知道取出的4个点顺序是怎样的,4个点的顺序就决定了我们透视变换后的图像的方向,由4个点坐标我们可以确定4个点围成的矩形的中点,然后就可以根据中点确定4个点的顺序(这里我们按左上,右上,右下,左下),,4个点的顺序有了,就可以确定两组对边,于是我们根据两组相对的边,取每组相对长的那条为标准就确定了长和宽

5点图

这里写图片描述

6.
上面的准备工作都做好了以后我们就可以开始将图片独立出来了,这里便需要用到图形学中非常重要的一个概念了,透视变换!!有了4个顶点和长宽,我们就可以确定我们要独立出来的图像的顶点的位置,然后又知道原来4个点在原图中的位置,于是就可以算出变换矩阵,然后再根据这个变换矩阵进行透视,我们就大功告成了

扫描出来的图像

这里写图片描述

7.
如果我们想做成黑白复印的效果怎么做呢?很简单,我们可以根据灰度图的灰度,然后确定一个阙值,然后用这个阙值,与每个像素点相比较,高于阙值的就变换成白色,低于的就变成黑色,于是就有了下图的效果

黑白图

这里写图片描述

2018-05-03 13:04:23 m0_37863832 阅读数 229

1.RGB
RGB模式是有红绿蓝三种颜色的光线组成,主要是应用在显示屏的屏幕上,因此也被称作色光模式,每一种颜色的强度可以分为256阶层,从0到255。255 表示最饱和状态,0表示光线强度为0,指没有光线。生活中我们所说的黑色是由于三种颜色的强度都是0,组合在一起的,所以我们所认识的黑色是不存在的,没有真正的黑色。另外三种颜色互相组合亮亮相加又形成了新颜色,及青、品、黄。最后三种颜色相组合形成白色。

2.lab模式
lab与rgb有本质的区别。
LAB的三个通道分别代表:L是明度。A是红绿。b是黄蓝。
在lab模式下的曲线,因为明度是单独保存在L通道中的,所以我们可以在不改变色彩信息的前题下调整明度。同样的,我们也可以不改变明度的前题下调整色彩。这是rgb模式下的曲线无法做到的。因为rgb的三个通道分别保存的是红绿蓝三原色。
lab下的a通道保存绿与红,曲线的0点原点在线的中点。原点以上的线数用正数标记,代表红色,绝对值越大,色彩越浓。原点以下的线数值负数标记,代表绿色,绝对值越大,色彩越浓。然后b通道你自己去类推一下。所以lab下的a、b通道是一根曲线调两个原色。调整原理也和rgb下的曲线调整完全不能等同。rgb是加红等于减青,加蓝等于减黄,提亮度必然色淡,加暗必然色浓。lab则不然,调明度只影响明度,把原点添加锚点后,就加红只加红,添绿只添绿,根本不会影响其它颜色信息。
3.HSV 模式
HSV(hue,saturation,value)颜色空间的模型对应于圆柱坐标系中的一个圆
锥形子集,圆锥的顶面对应于 V=1。它包含 RGB 模型中的 R=1,G=1,B=1 三个面,
所代表的颜色较亮。色彩 H 由绕 V 轴的旋转角给定。红色对应于角度 0°,绿色
对应于角度 120°,蓝色对应于角度 240°。在 HSV 颜色模型中,每一种颜色和
它的补色相差 180°。饱和度 S 取值从 0 到 1,所以圆锥顶面的半径为1。HSV
颜色模型所代表的颜色域是 CIE 色度图的一个子集,这个模型中饱和度为百分之
百的颜色,其纯度一般小于百分之百。在圆锥的顶点(即原点)处,V=0,H 和 S 无
定义,代表黑色。圆锥的顶面中心处 S=0,V=1,H 无定义,代表白色。从该点到
原点代表亮度渐暗的灰色,即具有不同灰度的灰色。对于这些点,S=0,H 的值无
定义。可以说,HSV 模型中的 V 轴对应于 RGB 颜色空间中的主对角线。在圆锥顶
面的圆周上的颜色,V=1,S=1,这种颜色是纯色。HSV 模型对应于画家配色的方
法。画家用改变色浓和色深的方法从某种纯色获得不同色调的颜色,在一种纯色
中加入白色以改变色浓,加入黑色以改变色深,同时加入不同比例的白色,黑色
即可获得各种不同的色调。
žHSV 颜色空间可以用一个圆锥空间模型来描述。

CT图像重建技术

阅读数 39778

做一个追梦人

阅读数 528

没有更多推荐了,返回首页