随笔分类 -  Matlab练习程序

上一页 1 ··· 7 8 9 10 11 12 13 14 15 下一页
摘要:小技巧在函数中用persistent定义变量。例子:function re=test() persistent a; if isempty(a) a=1; end a=a+1; re=a;end 阅读全文
posted @ 2013-04-09 15:46 Dsp Tian 阅读(2051) 评论(0) 推荐(1) 编辑
摘要:老物了,网上的例子多的数不过来。不过我还是有必要练习一下的。之所以看这个算法是因为最近在看颜色聚合向量时,有的论文用到了最小生成树,因此我就拿来熟悉一下。Kruskal算法类似于连通分支算法,感觉和过去实现过的连通区域标记算法非常像。步骤:1.对于一个图,将图的每条边提取出来从小到大进行排序。2.将已排序的边依次加入到新图中,如果新图中出现了环,那么就舍弃这条边。3.不断重复第二步。下面两个图就是kruskal算法前后的样子。代码如下:main.mclear all;close all;clc;%算法导论P349的列子G=[0 4 0 0 0 0 0 8 0; 4 0 8 0 0 0 0 .. 阅读全文
posted @ 2013-04-09 15:07 Dsp Tian 阅读(13089) 评论(3) 推荐(1) 编辑
摘要:立体感知对应点匹配基本分为两种:一是低层的基于像素级的匹配,二是高层的基于特征级的匹配。这里介绍的是底层的像素级匹配。用摄像头平行移动获取两张图片,其实就是双目感知到的两张图片。原理是在一定的窗口中,两张图片具有相同的水平视差,而对比这两个局部窗口中的像素相似度就能计算出当前像素的深度。先看下效果吧: left.img right.img depth.img具体判断像素相似度的判据有以下几种:所有公式(非官方公式哈,自己凭理解写的)中ds是原图中的像素块(左图),dd是待检测图的像素块(右图),i是... 阅读全文
posted @ 2013-04-07 22:26 Dsp Tian 阅读(8143) 评论(1) 推荐(1) 编辑
摘要:好老的技术了,91年的,不过我发现网上介绍的还真不多。steerable filters方向可调滤波器,通过在不同方向上产生模板,然后用不同方向上的模板去卷积图像,就能得到图像的边缘。产生的模板分不同阶,不同阶有不同的系数,系数分幅度系数和方向系数,最后的模板是不同方向上的系数相乘再相加。下面是一些求系数的公式,都是在mit的一个教程上找到的,并且我也用了其中的三阶系数来编程。二阶系数:三阶系数:四阶系数:五阶系数:最终需要的模板G=Ha*ka+Hb*kb+Hc*kc等等就看用几阶了。matlab代码:clear all;close all;clc;sigma=0.5;h=floor(2*si 阅读全文
posted @ 2013-03-25 22:10 Dsp Tian 阅读(3896) 评论(1) 推荐(1) 编辑
摘要:纹理描述的共生矩阵方法是基于在纹理中某一灰度级结构重复出现的情况;这个结构在精细纹理中随着距离而快速的变化,而在粗糙纹理中则缓慢的变化。假设待分析在精细纹理图像的一部分是一个M*N的矩形窗口。某一灰度级结构的出现情况可以由相对的频率的矩阵来描述,他描绘了具有灰度级a,b的两个像素,在方向Φ上间隔距离为d,以多大的频率出现在窗口中。共生矩阵求取方法:这里有两种定义,书上的是第一种,也就是对称矩阵的定义,如下:我程序用的是非对称的矩阵的定义,如下:哦,我想这一大堆公式是不那么容易看明白的,不过下面这个图就让人一目了然了。下图中的Φ=0,d=1.共生矩阵产生完之后就需要使用其派生出的准则了。主要有如 阅读全文
posted @ 2013-03-23 20:28 Dsp Tian 阅读(6184) 评论(3) 推荐(2) 编辑
摘要:一种图像特征的提取算法。算法步骤:1.用3*3的模板对图像每个像素进行处理,比较当前像素和周围像素的大小,将大于当前像素的置1,小于的置0。2.对这周围八个像素进行编码,这八个0和1正好是可以组成一个byte数,然后按一定的规则组成这个无符号数。3.把这个数赋值给当前像素。4.通常对处理后的图像进行区域划分,比如分成4*4 、10*10或16*16的区域,对每个区域求得直方图,得到16、100或256个直方图。(划分都不是固定的)5.这些直方图就是特征了,可以根据需要任意使用了。下面是简单的实现:clear all;close all;clc;img=imread('lena.jpg& 阅读全文
posted @ 2013-03-19 20:07 Dsp Tian 阅读(27681) 评论(7) 推荐(1) 编辑
摘要:K最邻近密度估计技术是一种分类方法,不是聚类方法。不是最优方法,实践中比较流行。通俗但不一定易懂的规则是:1.计算待分类数据和不同类中每一个数据的距离(欧氏或马氏)。2.选出最小的前K数据个距离,这里用到选择排序法。3.对比这前K个距离,找出K个数据中包含最多的是那个类的数据,即为待分类数据所在的类。不通俗但严谨的规则是:给定一个位置特征向量x和一种距离测量方法,于是有:1.在N个训练向量外,不考虑类的标签来确定k邻近。在两类的情况下,k选为奇数,一般不是类M的倍数。2.在K个样本之外,确定属于wi,i=1,2,...M类的向量的个数ki,显然sum(ki)=k。3.x属于样本最大值ki的那一 阅读全文
posted @ 2013-03-06 16:11 Dsp Tian 阅读(41761) 评论(4) 推荐(6) 编辑
摘要:在此作以记录。 代码如下: clear clc img=double(imread('lena.jpg')); matlabpool local 2 %设置核数 tic parfor i=1:1000 %多运行几次,注意不是for [s v d]=svd(img); end toc matlabpo 阅读全文
posted @ 2013-02-26 22:03 Dsp Tian 阅读(2182) 评论(1) 推荐(0) 编辑
摘要:这里的环境是windows7+vs2010+matlabR2010b上一篇是通过engine来调用matlab中的语句,本篇是通过调用m文件编译成的h/lib/dll文件而实现的。首先写一个函数mysvd.m:function [s v d]=mysvd(a) [s v d]=svd(a);end在matlab终端输入mbuild -setup来选择要使用的编译器,按提示选择就可以了。选择好之后再输入mcc -W cpplib:libmysvd -T link:lib mysvd.m稍等片刻,当前目录下就会产生一大堆文件,不过我们只需要libmysvd.h、libmysvd.lib、li... 阅读全文
posted @ 2013-02-26 19:45 Dsp Tian 阅读(9981) 评论(5) 推荐(2) 编辑
摘要:就我目前了解的c++调用matlab有两种方法。第一种是通过matlab引擎调用,也就是这里用到的方法。第二种是用matlab将m文件编译为相应的h/lib/dll文件再加以调用。使用engine所用到的h和lib文件基本在D:\Program Files\MATLAB\R2010b\extern里面,当然不同的机器安装的地方都不一样。头文件只需engine.h即可。lib文件需要这三个:libmx.lib/libmat.lib/libeng.lib。至于如何配置我就不介绍了,方法很多。引擎相应的部分函数如下:engOpen:启动Matlab引擎engClose:关闭Matlab引擎engGe 阅读全文
posted @ 2013-02-26 14:55 Dsp Tian 阅读(9548) 评论(0) 推荐(0) 编辑
摘要:我这里的环境是window 7+vs2010+matlab R2010b。首先需要输入mex -setup来确定需要使用的编译器,基本按照提示一步步下来就行了。下面是写c++文件,这里写的c++文件名就是将来要调用的函数名,我这里是SUM.cppSUM.cpp:#include "mex.h" //必须有这个//调用形式 re=SUM(arr0,arr1),将两个矩阵相加赋值给结果矩阵。//nlhs:输出参数个数//plhs:输出参数列表//nrhs:输入参数个数//prhs:输入参数列表void mexFunction(int nlhs,mxArray *plhs[], 阅读全文
posted @ 2013-02-25 21:42 Dsp Tian 阅读(2566) 评论(0) 推荐(0) 编辑
摘要:《数字图像处理》书上说这7个矩是旋转、缩放、平移不变的,因此用这7个矩就可以代表一个图像了。我只试验了缩放的,这几个数几乎是不变的,也许做图像检索的时候可以用到。代码:main.mclear all;close all;clc;img=imread('lena.jpg');fai1=two_dim_moment(img);img1=imresize(img,[100 100]);fai2=two_dim_moment(img1);img2=imresize(img,[300 300]);fai3=two_dim_moment(img2);two_dim_moment.mfunc 阅读全文
posted @ 2013-01-05 19:17 Dsp Tian 阅读(5639) 评论(0) 推荐(0) 编辑
摘要:主要功能是提取图像的骨架,方法是不断对图像进行腐蚀并且标记每个像素腐蚀到值不再变化的次数。clear all;close all;clc;img=imread('5.jpg');[m n]=size(img);m=double(m);n=double(n);Min=double(min(img(:))); %不断腐蚀的结果是像素全为最小值%Max=double(max(img(:))); %不断膨胀的结果是像素全为最大值w = strel('square',3);imgn=zeros(m,n);while sum(img(:))~=m*n*Min %不断腐蚀再腐 阅读全文
posted @ 2013-01-04 21:32 Dsp Tian 阅读(6879) 评论(0) 推荐(0) 编辑
摘要:早知道有向图和无向图差别没有想象中的大我就写到一起了。 函数中使用的arrow画箭头函数是在这个网站下的。 %函数名netplot %使用方法输入请help netplot %无返回值 %函数只能处理有向图 %作者:tiandsp %最后修改:2012.12.26 function netplot( 阅读全文
posted @ 2012-12-26 20:53 Dsp Tian 阅读(19567) 评论(8) 推荐(0) 编辑
摘要:寝室有一个是做网络的,需要把矩阵变为网络图使其形象一点,所以我在这里就写了这样一个函数。 功能是将邻接矩阵或关联矩阵变为网络图,不过我这里只能转换为无向图,有向图的箭头我还需要在研究一下,似乎有annotation函数可以调用。 %函数名netplot %使用方法输入请help netplot %无 阅读全文
posted @ 2012-12-26 19:36 Dsp Tian 阅读(20207) 评论(11) 推荐(4) 编辑
摘要:这个YCbCr是从YUV派生出来的,比较适合处理数字图像,JPEG压缩就是在这个彩色空间中处理的。变换公式。clear all;close all;clc;img=imread('lena_color.jpg');%img=mat2gray(img); %任意区间映射到[0,1];[m n dim]=size(img);imshow(img);%%图像的RGBimg=double(img);R=img(:,:,1);G=img(:,:,2);B=img(:,:,3);%%RGB2YCbCrY=zeros(m,n); %亮度Cb=zeros(m,n); %彩度Cr=zeros(m 阅读全文
posted @ 2012-12-22 18:25 Dsp Tian 阅读(14396) 评论(0) 推荐(0) 编辑
摘要:这里的变换公式是模拟领域的公式,这里虽然是数字图像,不过也可以这样写,YCbCr采样另外的公式。clear all;close all;clc;img=imread('lena_color.jpg');img=mat2gray(img); %任意区间映射到[0,1];[m n dim]=size(img);imshow(img);%%图像的RGBR=img(:,:,1);G=img(:,:,2);B=img(:,:,3);%%RGB2YUVY=zeros(m,n); %亮度U=zeros(m,n); %彩度V=zeros(m,n); %浓度matrix=[0.299 0.58. 阅读全文
posted @ 2012-12-22 16:35 Dsp Tian 阅读(10024) 评论(0) 推荐(0) 编辑
摘要:色相饱和度亮度和三原色的相互转换function main img=imread('lena_color.jpg'); img=mat2gray(img); %任意区间映射到[0,1]; [m n dim]=size(img); imshow(img); %%图像的RGB R=img(:,:,1); G=img(:,:,2); B=img(:,:,3); %%图像RGB2HSL H=zeros(m,n); %色相角 S=zeros(m,n); %饱和度 L=zeros(m,n); %亮度 for i=... 阅读全文
posted @ 2012-12-22 15:48 Dsp Tian 阅读(4336) 评论(1) 推荐(0) 编辑
摘要:色相饱和度明度和三原色的相互转换clear all;close all;clc;img=imread('lena_color.jpg');img=mat2gray(img); %任意区间映射到[0,1];[m n dim]=size(img);imshow(img);%%图像的RGBR=img(:,:,1);G=img(:,:,2);B=img(:,:,3);%%图像的RGB2HSVH=zeros(m,n); %色相角S=zeros(m,n); %饱和度V=zeros(m,n); %明度for i=1:m for j=1:n r=R(i,j); g... 阅读全文
posted @ 2012-12-22 15:34 Dsp Tian 阅读(12455) 评论(1) 推荐(0) 编辑
摘要:老是搞灰度图像我都不好意思了,所以现在开始看看彩色图像方面的东西。首先就是彩色空间了。clear all;close all;clc;img=imread('lena_color.jpg');img=mat2gray(img); %任意区间映射到[0,1];[m n dim]=size(img);%%图像的RGBR=img(:,:,1);G=img(:,:,2);B=img(:,:,3);%%图像的RGB2CMYC=1-R;M=1-G;Y=1-B;%%图像的CMY2RGBR=1-C;G=1-M;B=1-Y;%%如果正反变换都没错的话,那么图像是不变的img(:,:,1)=R;i 阅读全文
posted @ 2012-12-22 15:14 Dsp Tian 阅读(2196) 评论(0) 推荐(0) 编辑

上一页 1 ··· 7 8 9 10 11 12 13 14 15 下一页