请教过来人如何学习数字图像处理 opencv和opencv

1519人阅读
数字图像处理(65)
图像分割结果是得到了区域内像素集合,或位于区域边界上的像素集合。
把图像分割后,为了进一步的识别等处理,分割后的图像一般要进行表示和描述。
表示是直接具体地表示目标,好的表示方法应具有节省存储空间、易于特征计算等优点。选择表示方案,仅用来使得数据更实用于计算机的一部分。表示之后下一个任务是描述。一般情况下:
1)如果关注的焦点是形状特性,选择外部表示方式(其边界)。
2)如果关注的焦点是反射率特性,如颜色、纹理时,选择内部表示方式(如像素)。
&&&&&-描述是较抽象地表示目标。好的描述应在尽可能区别不同目标的基础上对目标的尺度、平移、旋转等不敏感,这样的描述比较通用。
&&&&&-描述也可分为对边界的描述和对区域的描述。几何形状属于外部描述。灰度和纹理属于内部描述。此外,边界和边界或区域和区域之间的关系也常需要进行描述。
表示方法:
目标内边界的像素全都在目标里面,目标外边界的像素全都不在目标上,是包围着目标的。
二值图像内外边界的计算都是有两种方法的,所以一共是4种算法,不过实际用到跟踪的只有一个而已。
首先是内边界跟踪:
第一种方法不是跟踪方法。步骤是先对原图像腐蚀,然后用原图像减去腐蚀后的图像就得到边界了。
第二种方法是跟踪方法。步骤如下:
1.遍历图像。
2.标记第一个遇见像素块的前景像素(i,j)。
3.对这个像素周围八邻域逆时针搜索,如果搜索到周围有前景像素,那么更新坐标(i,j)为(i',j'),并标记。
4.不断执行第3步直到再次遇见此像素块第一次标记的像素。
5.继续执行第1步。
然后是外边界跟踪:
第一种方法和求内边界第一种方法类似。先对原图像进行膨胀,然后用膨胀后的图像减去原图像即可。
第二种也不算跟踪方法,只是标记算法而已。就是将图像中前景像素周围的非前景像素标记一下就行了。
1 链码定义:
&1)链码是一种边界的编码表示法。
&2)用边界的方向作为编码依据,简化边界的描述。一般描述的是边界点集。
1)链码相当长。
2)噪声会产生不必要的链码。
1)加大网格空间。
2)依据原始边界与格点的接近程度,来确定新点的位置。
1)由于起点的不同,造成编码的不同。
2)由于旋转角度的不同,造成编码的不同。
1)通过使用链码的循环一阶差分代替链码本身,解决旋转问题。
2)对起点重新定义,使得到的循环差分链码对应的整数值最小。这样得到的最小循环差分链码称为形状数
多边形逼近
点合并,边分裂,MPP
质心角函数
问题:函数过分依赖于旋转和缩放变换。
对于旋转——两种改进:
a.选择离质心最远的点作为起点。
b.选择从质心到主轴上最远的点作为起点。
对于缩放变换:
&&&& 对函数进行归一化,使函数值总是分布在相同的值域里,比如说[0,1]。
1 基本概念:
一个任意集合S(区域)的凸壳H是:包含S的最小凸集。
H-S的差的集合被称为集合S的凸起补集(凸形缺陷)D。
2 分段算法:
给进入和离开凸起补集D的变换点打标记来划分边界段。
优点:不依赖于方向和比例的变化。
表示一个平面区域结构形状的重要方法是把它削减成图形。这种削减可以通过细化(也称为抽骨架)算法,获取区域的骨架来实现。
用Blum的中轴变换方法(MAT, medial axis transform)来定义骨架。
&设:R是一个区域,B为R的边界点,对于R中的点p,找p在B上“最近”的邻居。如果p有多于一个的这样的邻居,称它属于R的中轴(骨架)。
边界描绘子:
区域边界描绘--&边界描述符
长度,直接,基本矩形,长/轴,偏心率,直径。
曲率:相邻边界的斜率差来表示曲率。
形状数,最小量级的一次差分。
傅里叶描绘子。即将坐标序列点表示为复数形式,再做傅里叶变换。
如均值,方差,高阶矩
区域描绘子:
如面积,周长,
圆度率,该区域面积与相同周长的圆的比值。
致密性:周长^2/面积。
其他如灰度中值,最大值,最小值,以及在均值上下的像素数
拓扑描绘子:
欧拉数:E = C - H;
纹理
&&&&&描绘图像局部纹理内容的方法,例如图像平滑度、粗糙度和规律性等特性,主要有三种方法:统计方法、结构方法和频谱方法。
&&&&&使用一副图像或一个局部区域统计直方图的统计矩进行描绘。μn(Z)
m为z的均值,二阶矩(方差)在纹理描述中非常重要,它是对比度的度量,可以建立相对平滑度的描绘子R(z)&&&&&&
在恒定灰度趋于为0,相对较大的方差,其接近于1.
三阶矩是直方图偏斜度的描述,即用于确定直方图的对称程度以及他们是向左偏斜(负值)或者向右偏斜(正值),这给出了灰度级是偏斜均值的暗端还是偏向亮端。就纹理而言,仅当度量的变化较大时,三阶矩导出的信息才是有用的。
四阶矩描述直方图的相对平坦度。同时还有纹理一致性度量:U(z)
该度量对所有灰度级都相等的图像有最大值(极大一致性),并从最大值开始降低。
平均熵度量(熵是可变性度量,对恒定图像其为0)e(z):
灰度共生矩阵
将一个像素对出现的次数描绘在一个灰度阶数矩阵中,最终形成的矩阵,称为其灰度共生矩阵。
利用灰度共生矩阵的描绘子,如最大概率,相关,对比度,一致性(也称为能量),同质性,熵可以检测图像中的纹理。
结构方法:
&&&&&将一个简单的“纹理基元”借助一些规则形成复杂的纹理模式,这些重写规则限制基元的排列方式和数量。
频谱方法:
&&&&&利用纹理的周期性特点,对其进行傅里叶变换,其傅里叶频谱中:突出的尖峰给出了纹理的主要方向,尖峰的位置给出纹理的基本空间周期,而且可以采取滤波方法消除周期性分量,留下非周期性元素,以便于采取统计技术进行描述。
在实际中通常采用极坐标来表达。
适用于边界和区域的描绘子
主分量描绘子
霍特林变化又称主分量变换,利用主分量可以做传送中的图像压缩和重建。
&&&&&区域中不同像素点作为向量的分量,对该区域进行佛特林变换,对图像归一化。
关系描绘子
&&&&&利用重写规则的概念,规则的形式来获取边界或区域中的基本重复模式:
用有向线段来描述
&&&&&另一种更通用的方法:按照定义的规则,用抽象的基元定义典型的操作,来描述完整的图形结构。
用树形结构来描述
&&&&&用树形结构描述图形信息:节点代表子图,节点之间的关系表示子图之间的关系。


参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:671623次
积分:8910
积分:8910
排名:第1680名
原创:223篇
转载:256篇
评论:80条
(2)(14)(15)(6)(3)(27)(26)(63)(23)(8)(1)(4)(4)(13)(15)(1)(1)(3)(1)(1)(8)(5)(1)(7)(5)(2)(1)(1)(4)(4)(1)(8)(3)(5)(6)(2)(2)(1)(8)(1)(1)(2)(21)(31)(10)(29)(21)(8)(42)(1)【图文】数字图像处理-OpenCV用法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
数字图像处理-OpenCV用法
上传于|0|0|暂无简介
大小:29.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢数字图像处理opencv_中国科学技术大学吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:120,459贴子:
数字图像处理opencv收藏
有没有数字图像处理方面的大神,本人水狗在做一个障碍物检测方面的算法,欠缺很多,希望大牛们不吝赐教啊。最好是用opencv做的。
以前做过障碍物提取,推荐看openCV的教程,主要是高斯平滑滤波,膨胀,腐蚀,阈值分割等操作,具体教程好点。
@要就不是我了
不用matlab么
你用LIDAR还是相机啊?
OpenCV的文档还是很详细的
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或#include &cv.h&
#include &highgui.h&
#include &cxcore.h&
#include &stdio.h&
#include &iostream&&
#include &iomanip& &
#include &string&
#define Im(ROW,COL) ((float *)(im-&data.fl + im-&step/sizeof(float) *(ROW)))[(COL)] &
#define Imnew(ROW,COL) ((float *)(imnew-&data.fl + imnew-&step/sizeof(float) *(ROW)))[(COL)]
//下采样原来的图像,返回缩小2倍尺寸的图像 &
CvMat * halfSizeImage(CvMat * im) &&
unsigned int i,j; &
int w = im-&cols/2; &
int h = im-&rows/2; &&
CvMat *imnew = cvCreateMat(h, w, CV_8UC1);
//由于IplImage是4通道的step,所有最好保持im输入图像和imnew的step一致。
imnew-&step = im-&step/2;
printf(&\n1、halfsize后的步长:%d&,imnew-&step);printf(&halfsize前的步长:%d\n&,im-&step);
printf(&2、halfsize后的步长:%d&,imnew-&step);printf(&halfsize前的步长:%d\n&,im-&step);
for ( j = 0; j & j++) &&
for ( i = 0; i & i++) &&
Imnew(j,i)=Im(j*2, i*2); &
int main( int argc, char* argv[] ) {
IplImage* src = NULL;
IplImage* gray_src = NULL;
CvMat* src_
IplImage* halfsize_src = NULL;
CvMat* halfsize_src_
//读取图片
if((src=cvLoadImage(&1.bmp&,1)) ==0 )
return -1;
cvNamedWindow(&source image&,1);
cvNamedWindow(&halfSizeImage&,1);
cvNamedWindow(&src_mat_src&,1);
cvShowImage(&source image&,src);
//转化成单通道图像再处理
gray_src = cvCreateImage(cvSize(src-&width,src-&height),IPL_DEPTH_8U,1);
cvCvtColor(src,gray_src,CV_BGR2GRAY);
cvNamedWindow(&source gray image&,1);
cvShowImage(&source gray image&,gray_src);
//为图像阵列分配内存,假设两幅图像的大小相同,tempMat跟随image1的大小
src_mat = cvCreateMat(src-&height,src-&width,CV_8UC1 );
//转换进入Mat数据结构,图像操作使用的是浮点型操作
cvConvert(gray_src,src_mat);
src_mat-&step = gray_src-&widthS
printf(&src_mat size:[%d %d]\n&,src_mat-&cols,src_mat-&rows);
//将图像数据还原成图像8位无符号单通道
IplImage* src_mat_src = cvCreateImage(cvGetSize(src),8,1);
& & cvGetImage(src_mat,src_mat_src);
src_mat_src-&widthStep = src-&//显示时候更改好
printf(&src_mat_src %d\n&,src_mat_src-&widthStep);
cvShowImage(&src_mat_src&,src_mat_src);
printf(&%d %d\n&,src_mat-&step,gray_src-&widthStep);
halfsize_src = cvCreateImage(cvSize(src-&width/2,src-&height/2),8,1);&
halfsize_src_mat = cvCreateMat(src-&height/2,src-&width/2,CV_8UC1 );
halfsize_src_mat-&step = gray_src-&widthStep/2;
printf(&%d %d&,halfsize_src_mat-&step,gray_src-&widthStep);
halfsize_src_mat = halfSizeImage(src_mat);
printf(&size:[%d %d]\n&,halfsize_src_mat-&width,halfsize_src_mat-&height);
halfsize_src_mat-&step=halfsize_src-&widthS
printf(&size:[%d %d]\n&,halfsize_src-&width,halfsize_src-&height);
& & cvGetImage(halfsize_src_mat,halfsize_src);
halfsize_src-&widthStep = gray_src-&widthStep/2;
printf(&%d \n&,halfsize_src-&widthStep);
cvShowImage(&halfSizeImage&,halfsize_src);
printf(&%d \n&,halfsize_src-&widthStep);
cv::namedWindow(&halfSizeImage&, 1);
cv::imshow(&halfSizeImage&,temp1);
cvWaitKey(0);
cvDestroyWindow(&source image&);
cvDestroyWindow(&halfSizeImage&);
cvReleaseImage( &src );
cvReleaseImage( &src );
本文转载自:
欢迎加入我爱机器学习QQ9群:
微信扫一扫,关注我爱机器学习公众号
欢迎加入我爱机器学习QQ9群:
最新文章列表
NIPS 2016 — Day 1 Highlights NIPS 2016 — Day 2 Highlights:...
2017年二月 &(27)
2017年一月 &(54)
2016年十二月 &(62)
2016年十一月 &(97)
2016年十月 &(97)
2016年九月 &(124)
2016年八月 &(83)
2016年七月 &(13)
2016年六月 &(10)
2016年五月 &(6)
2016年四月 &(9)
2016年三月 &(7)
2016年二月 &(2)
2016年一月 &(3)
2015年十二月 &(5)
2015年十一月 &(4)
2015年十月 &(2)
2015年九月 &(2)
2015年八月 &(3)
2015年七月 &(6)
2015年六月 &(8)
2015年五月 &(4)
2015年四月 &(1)
2015年三月 &(3)
2015年二月 &(1)
2015年一月 &(2)
2014年十二月 &(4)
2014年十一月 &(2)
2014年十月 &(3)
2014年九月 &(4)
2014年八月 &(22)
2014年七月 &(40)
2014年六月 &(61)
2014年五月 &(63)
2014年四月 &(187)
2014年三月 &(4799)
2014年二月 &(764)
2014年一月 &(330)
2013年十二月 &(145)
2013年十一月 &(126)
2013年十月 &(216)
2013年九月 &(284)
2013年八月 &(327)
2013年七月 &(275)
2013年六月 &(315)
2013年五月 &(228)
2013年四月 &(175)
2013年三月 &(186)
2013年二月 &(118)
2013年一月 &(210)
2012年十二月 &(221)
2012年十一月 &(155)
2012年十月 &(144)
2012年九月 &(98)
2012年八月 &(99)
2012年七月 &(109)
2012年六月 &(75)
2012年五月 &(88)
2012年四月 &(78)
2012年三月 &(78)
2012年二月 &(50)
2012年一月 &(17)
2011年十二月 &(27)
2011年十一月 &(6)
2011年十月 &(11)
2011年九月 &(13)
2011年八月 &(13)
2011年七月 &(19)
2011年六月 &(18)
2011年五月 &(6)
2011年四月 &(12)
2011年三月 &(15)
2011年二月 &(6)
2011年一月 &(9)
2010年十二月 &(6)
2010年十一月 &(11)
2010年十月 &(5)
2010年九月 &(8)
2010年八月 &(5)
2010年七月 &(12)
2010年六月 &(4)
2010年五月 &(7)
2010年四月 &(6)
2010年三月 &(12)
2010年二月 &(7)
2010年一月 &(2)
2009年十二月 &(5)
2009年十一月 &(16)
2009年十月 &(6)
2009年九月 &(7)
2009年八月 &(7)
2009年七月 &(5)
2009年六月 &(6)
2009年五月 &(6)
2009年四月 &(4)
2009年三月 &(7)
2009年二月 &(6)
2009年一月 &(1)
2008年十二月 &(4)
2008年十一月 &(5)
2008年十月 &(1)
2008年八月 &(1)
2008年七月 &(3)
2008年六月 &(3)
2008年五月 &(3)
2008年三月 &(1)
2007年十二月 &(1)
2007年十月 &(1)
2007年八月 &(4)
2007年七月 &(1)

我要回帖

更多关于 数字图像处理 opencv 的文章

 

随机推荐