【图像算法】
文章平均质量分 69
Denny#
图像处理,安卓开发。
展开
-
【图像处理】Matlab使用技巧
这里整理下matlab的使用技巧,不定期更新。1、二维矩阵的取值:A(x,y) 表示二维矩阵第 x 行第 y 列位置的元素,当 x 为 : 时则表示所有的行。>> A = [ 1,2,3; 4,5,6; 7,8,9 ]; >> A(2,1)ans = 4>> A(:,1)ans = 1 4 7>> A(1,:)ans = 1原创 2015-11-12 20:24:18 · 1339 阅读 · 0 评论 -
【图像处理】SFR算法详解1
这几篇文章写的是SFR算法,主要根据相关的概念及其对应的标准和源码,来看看SFR究竟是什么?这里先简单介绍下一些基本的概念1、什么是MTFMTF算法是分析镜头解像能力的算法,其全称是Modulation Transfer Function(调制传递函数)。为了理解这个,首先需要知道什么是调制Modulation。Modulation类似于对比度的概念,其数学表达公式如下: 它表示的是亮度最大值原创 2016-03-14 20:44:42 · 39260 阅读 · 0 评论 -
【图像处理】SFR算法详解2
这个是《【图像处理】SFR算法详解1》的后续,本篇主要讲解SFR算法过程。这里主要参考ISO 12233标准所描述的SFR算法过程,详见《ISO 12233-2000 Camera resolution measurement》中6.3 Saptial frequency response。1、水平SFR及垂直SFRSFR是通过分析相机拍摄到的图像中一个黑色到白色的斜边而得到的,即下图中所示的红框部原创 2016-02-19 22:22:36 · 28311 阅读 · 0 评论 -
【图像处理】SFR算法详解3
本篇为SFR算法详解系列的第三篇,前面两篇为: 《SFR算法详解1》:什么是MTF,MTF50,MTF50P 《SFR算法详解2》:算法过程描述本篇主要根据第二篇中的算法流程,描述前面的几个流程及其相关原理。这里参考标准中的附录C算法原理及mitre SFR的代码实现,并结合自己需要对其进行优化。1、获取图像ROI这里从拍摄的图像(一般为RGB)中截取ROI区域,并将其转换为Gray。有个问题就原创 2016-03-31 22:51:11 · 22789 阅读 · 3 评论 -
【图像处理】SFR算法详解4
本篇为SFR算法详解系列的第四篇,前面三篇为: 《SFR算法详解1》:什么是MTF,MTF50,MTF50P 《SFR算法详解2》:算法过程描述 《SFR算法详解3》:ROI定义,线性化,centroid本篇主要根据第二篇中的算法流程,描述几个流程及其相关原理。4、线性回归在得到对应的矩心之后,对其进行线性回归。这里采用最小二乘法,求出估计参数a、b。 最小二乘法的目的是为了使得各个矩心原创 2016-03-31 23:08:30 · 15366 阅读 · 0 评论 -
【图像处理】RGB转YUV 优化
最近在项目的过程中需要用到 YUV 的 Y通道数据,但是原始数据图像为RGB格式,所以自己写了一个RGB2YUV的程序,并且进行优化,对此总结如下。RGB2YUV 原理RGB及YUV是两种不同的颜色空间,具体可以换算关系如下:根据该换算关系,我们直接可以得到Y通道数据。程序1void rgb2yuv2(unsigned char *R,unsigned char *G,unsigned char *原创 2016-02-03 21:47:37 · 3250 阅读 · 0 评论 -
【图像处理】sobel算子简述
sobel算子是什么在图像处理上,算子一般也可以认为是滤波器filter,滤波器就是在一个像素点上对它进行与邻域之间的运算。如中值滤波,就是在以像素点为中心,上下左右左上左下右上右下为邻域的集合里,如下图所示结构: 中值滤波就是对P1到P9进行排序,然后获取数值大小排在中间的值,把这个值当做该中心像素点P5的新值。而sobel算子,是为了用来计算边缘的,一般而言,以3x3为大小,有下面这两种形原创 2016-03-14 21:32:15 · 12972 阅读 · 0 评论 -
【图像处理】颜色距离
本篇文章主要描述颜色距离及其具体颜色距离的实现。1、颜色距离颜色距离指的是两个颜色之间的差距,通常距离越大,两个颜色相差越大,反之,两个颜色越相近。在计算颜色距离时,有类似计算两点间欧式距离的公式一样,在RGB空间内,可以得到两个颜色之间的距离为: 其中,C1 C2表示颜色1和颜色2,C1R表示颜色1的R通道。 但是,由于RGB空间是线性的并且相互正交,而人眼的视觉系统并不是线性的,RG原创 2016-04-12 21:22:40 · 24365 阅读 · 6 评论 -
【图像处理】代码优化技巧
在手机端的图像处理程序中,为了提升算法运行速度,需要对程序代码进行优化。而如何优化?需要在哪些地方进行优化?这些都是我们需要思考的问题。 因此,这里对代码优化进行相关总结,并将不定期更新,作为长期的总结笔记。1、for循环中,用!=代替<进行条件判断。图像算法总是需要用重复的操作处理连续的数据,因此,就需要用到for循环语句。在for循环语句中,进行条件判断的时候,用!=代替<,能够减少1个指令,原创 2015-10-06 19:06:06 · 1789 阅读 · 2 评论 -
【EmguCV】EmguCV各种调用
后续将不定期补充在使用EmguCV过程中的一些笔记,如何调用api实现相应功能。1、查找对应的轮廓IntPtr Dyncontour = new IntPtr();//存放检测到的图像块的首地址 IntPtr Dynstorage = CvInvoke.cvCreateMemStorage(0);//开辟内存区域 int m = 88;int n = CvInvoke.cvFindCont原创 2017-01-17 23:02:43 · 5197 阅读 · 2 评论 -
【图像处理】多帧降噪算法
多帧降噪算法视频去噪算法原创 2017-03-30 00:08:25 · 23210 阅读 · 0 评论 -
【图像处理】积分图像及其应用
本文主要参考: http://blog.csdn.net/u010839382/article/details/46383423 然后结合自己的理解,在手机上做对应的对比测试。积分图积分图,integral image,是在图像处理中常用于加速计算的一种方法。 在积分图中,某一点的数据S(x,y)S(x,y)表示图像左上角到该点坐标所围成的区域的总和。在积分图中,我们需要做两个操作: 1)构原创 2017-03-31 00:01:03 · 5727 阅读 · 0 评论 -
【图像算法优化】开篇:simd-library介绍及几个优化技巧
本系列主要学习simd-library中的代码,包括basic部分跟neon优化部分。simd-library是用于图像处理的算法库,里面大量的用了SIMD指令对常用的图像处理算法进行优化,github的项目地址为:https://github.com/ermig1979/Simd后续将学习这部分代码,并记录下相关笔记。本文主要是simd-math部分,具体为: https://github.co原创 2017-04-01 00:14:33 · 4263 阅读 · 0 评论 -
【图像处理】OTSU二值化原理及代码实现
基本思想OTSU算法主要用于在灰度图像中查找一个阈值k,该阈值把图像区分为前景图像C0和背景图像C1。关键在于阈值是怎样确定的。OTSU算法的思路类似于聚类,聚类就是给定一定的数据,让你根据数据的特性进行分类,使得这两类的数据能够分类合理,即常说的无监督学习。相对应的监督学习则是给定数据及分类对训练器进行训练然后对新数据进行估计。对于这个阈值k,我们可以得到两个分类原创 2016-02-18 20:42:01 · 4709 阅读 · 1 评论 -
【图像处理】颜色空间
这里介绍RGB、YUV颜色空间,及其他们的转换。RGB颜色空间通过RGB三个通道的变化及其它们的相互叠加来得到各式各样的颜色。不同的图片可能采用不同的位深来表示RGB分量,比较常见的有:RGB8 :256色,每个像素用8为表示,需要用调色板。调色板表示存储颜色信息的区域,以RGB8的值为索引,在调色板中获取对应的颜色分量信息。RGB565:每个像素用16位表示,R:原创 2015-12-16 22:25:04 · 2643 阅读 · 0 评论 -
【图像处理】图像算法开发过程
最近刚接触图像算法开发,一上来导师就给说说图像算法开发的过程。图像算法开发跟普通程序的软件算法开发又不一样,图像算法主要是关注如何对图像进行处理,也就是关注的优化的对象不一样。图像算法开发过程,一般是: 1)在PC端进行算法验证,达到所要实现的功能。 2)算法移植到目标平台上,如手机平台,实现算法功能。 3)算法优化,进行C/C++代码优化,NEON优化等等。在整个过程中,对算法的理解十分重要原创 2015-10-06 18:37:10 · 3514 阅读 · 1 评论 -
【图像算法】浮点数转定点数
这里对浮点数转定点数的技巧进行总结,不定期更新。1、浮点乘法转定点乘法在介绍YUV色彩空间时,发现有一个很有趣的地方。发现 YUV444 转 RGB888 的部分,有一个整数优化运算。在这里有:Cr = Cr - 128R = Y +Cr +(Cr>>2)+(Cr>>3)+(Cr>>5)可以看出,由原先的1.402 x ( Cr -128 )转换为右移代替浮点数乘法。具体转换为: Cr = Cr原创 2015-12-16 22:40:34 · 1864 阅读 · 0 评论 -
【图像处理】NEON编程5-向量重组
简介在编写NEON代码时,你可以发现,在寄存器中的数据有些时候并不是跟算法要求的那种格式。你可能需要在向量中重组这些数据使得后续的计算能够自动将正确的部分加起来,或者传输到你函数中的数据是以一个奇怪的方式呈现的,然后在你使用SIMD代码时,这些数据需要被重新排序。这种重新排序的方式叫做置换。置换指令重组从单个或者多个寄存器中选择的独立数据,并组成一个新的向量。在我们开始前在你开始使用这些置换指令时,翻译 2015-12-16 23:49:00 · 4219 阅读 · 1 评论 -
【图像处理】NEON编程2 剩余数据处理
原文地址在这里,我们将处理一种常见的问题:输入的数据不是向量长度的倍数,需要处理数组开头或者结尾的剩余数据时。这种情况下,NEON可以如何处理。剩余数据使用NEON通常都是操作长度为4到16位的数据向量。经常地,你将会发现数组并不是那些长度的倍数,你必须单独处理这些剩余的数据。例如,你想要在每个迭代中用NEON加载、处理及存储8个数据,但是你的数组是21个数据长度。前两次的迭代都能够正常进行,但是第翻译 2015-12-17 20:08:12 · 1671 阅读 · 0 评论 -
【图像处理】NEON编码4 - 左右移位
原文地址本文将介绍NEON提供的移位运算,并显示如何利用移位运算在常用颜色深度之间转换影像数据。本系列前期已发布的文章包括:第1部分:加载与存储,第2部分:余数的处理,第3部分:矩阵乘法。向量移位NEON上的移位与标量ARM编码中可能用到的移位非常相似,即每个向量元素的位数均向左或向右移位,出现在每个元素左侧或右侧的位将被删除;它们不能移位至相邻的元素。带符号元素的向量上发生的右移位由指令附加的类型转载 2015-12-17 20:23:29 · 2400 阅读 · 0 评论 -
【图像处理】NEON编程3 矩阵乘法
原文地址矩阵在这篇文章中,我们将会关注怎样高效的进行4x4矩阵相乘,这是在3D图形学中经常性被使用的。我们会假定矩阵在内存中以列的方式进行存储,这是在 OpenGL-ES中所使用的格式。算法这里通过展开计算过程,查看下矩阵运算的过程,并且辨别下能够用NEON指令实现的相关操作。在上图中,我们将第一个矩阵的每一列(红色标记)乘以在第二个矩阵中对应的数值(蓝色标记),然后将结果加起来,得到结果中的一个列翻译 2015-12-17 20:16:28 · 4891 阅读 · 0 评论 -
【图像处理】NEON编程1 - 加载及存储
介绍这一系列来自ARM社区上的Coding for NEON,这里主要翻译为中文以便后续理解参考。第一篇原文链接。ARM公司的NEON技术是基于64或128位的SIMD架构设计的,用于提升多媒体及信号处理应用的性能,包括视频编解码、声频编解码,3D图形,语言及图像处理。这篇文章是如何使用汇编语言编写NEON代码系列的第一篇,该系列将会覆盖NEON入门,高效应用及相关使用技巧提示。我们将会从内存操作开翻译 2015-12-17 20:00:32 · 5093 阅读 · 1 评论 -
【图像处理】直方图均衡化
直方图均衡化原理直方图均衡化的主要思想是将灰度值尽量分布平均,通过计算每个灰度值在图片中出现的概率大小,根据概率的直方图将灰度值进行均衡分配。PC端代码实现如下例所示,下例为在VS中实现的图像处理程序中直方图均衡化的部分,读取的图片格式为BMP,当图片为24Bit位深时,一个像素由三个字节表示。bool getHist(unsigned char *pImgData, un原创 2015-10-14 23:44:37 · 4766 阅读 · 3 评论 -
【图像处理】相机成像原理
这里对于相机成像原理做一个简单的介绍。如下图所示,在最左端的顶点为相机,它的镜头正对着地面上的点O,横向视场角为a,纵向视场角为θ,它所看到的区域就是就是如下所示的四边形,存在一定的投影变换。而地上的这个矩形在经过镜头对光线的处理之后,会呈现在摄像头的感光单元sensor上。其排列大致为:O‘ 为对应的O的位置,对应的像素在sensor上的UV坐标系中。在s原创 2016-02-17 23:10:24 · 3576 阅读 · 0 评论 -
【图像处理】空间变换
概念在图像处理中的空间变换(spatial transformation)分成两种情况,有仿射变换(Affine Transformation)及投影变换(Perspective Transformation)。仿射变换是从一个二维坐标变换到另一个二维坐标,它是一种线性变换,保持了图像的平行性和平直性,即在变换之后,原先图像中的直线与平行线还是保持一致。只是位置存在变化。仿射变换包括平移(Trans原创 2016-02-18 20:23:38 · 17916 阅读 · 0 评论 -
【图像处理】矩阵运算代码实现1
这里主要实现矩阵的一些基础运算,包括转置及乘法。后续将进行矩阵求逆的总结。 由于转置及乘法都比较简单,对其原理不再赘述。1、矩阵打印void matPrint(double* mat, int row,int col){ for(int i=0; i<row; i++) { for(int j=0; j<col; j++) printf("%原创 2016-02-18 21:02:04 · 1838 阅读 · 0 评论 -
【图像处理】矩阵运算代码实现2-矩阵求逆
这篇总结是《矩阵运算代码实现1》的后续,主要对矩阵求逆的算法及代码实现进行描述。具体如下。矩阵求逆算法这里采用的是LU分解对矩阵进行求逆。原理如下: inv(A)=inv(LU)= inv(U)inv(L) 将原矩阵A分解成两个三角矩阵,上三角矩阵L和下三角矩阵U。通过求解U和L对应的逆矩阵,即可求得相应A的逆矩阵。算法分成以下几个步骤: 1)矩阵的LU分解 对于LU上每个位置的值,可以用以原创 2016-02-18 21:43:19 · 2723 阅读 · 2 评论 -
【图像处理】双线性插值
基本原理双线性插值能够缩小图片放大时所产生的锯齿,主要原理是对所求像素点临近的四个点像素值进行加权叠加,权值可通过与对应点的距离得出。如下图所示,D为所求的点的位置,坐标为(X’,Y’),已知相邻四个点的像素值S(X,Y),S(X,Y+1), S(X+1,Y+1),S(X+1,Y)及对应距离dx,dy,求对应点D(X’,Y’)。Q(X1’,Y’)= S(X,Y) * (1-原创 2015-10-17 00:14:33 · 1778 阅读 · 0 评论