摘要:
图的相关算法也算是自己的一个软肋了,当年没选修图论也是一大遗憾。 图像处理中,也有使用图论算法作为基础的相关算法,比如图割,这个算法就需要求最大流、最小割。所以熟悉一下图论算法对于图像处理还是很有帮助的。 Dijkstra和Bellman-Ford类似,都是解决单源最短路径问题,不同的是这个方法只能 阅读全文
posted @ 2020-09-10 16:44
一杯清酒邀明月
阅读(625)
评论(0)
推荐(0)
摘要:
如此经典的算法竟一直没有单独的实现过,真是遗憾啊。 广度优先搜索在过去实现的二值图像连通区域标记和prim最小生成树算法时已经无意识的用到了,深度优先搜索倒是没用过。 这次单独的将两个算法实现出来,因为算法本身和图像没什么关系,所以更纯粹些。 广度优先搜索是从某一节点开始,搜索与其线连接的所有节点, 阅读全文
posted @ 2020-09-10 16:42
一杯清酒邀明月
阅读(1705)
评论(0)
推荐(1)
摘要:
算法没有和图像处理直接相关,不过对于图像分类中的模式识别相关算法,也许会用到这个优化算法。 算法步骤: 1.首先确定粒子个数与迭代次数。 2.对每个粒子随机初始化位置与速度。 3.采用如下公式更新每个粒子的位置与速度。 Px=Px+Pv*t; %位置更新公式 Pv=Pv+(c1*rand*(Gx-P 阅读全文
posted @ 2020-09-10 16:41
一杯清酒邀明月
阅读(405)
评论(0)
推荐(0)
摘要:
通过本篇和上一篇的结合,应该就能做出拉普拉斯图像融合了。 这里用的方法很简单,就是用模板和两个图像相乘,然后对处理后的两个图像再相加就可以了。 拉普拉斯融合就是对金字塔的每一层图像做这样的操作,然后再重构就行了。 先看看这里的效果: 原图apple 原图orange: 模板图像(实际处理时需要对模板 阅读全文
posted @ 2020-09-10 16:39
一杯清酒邀明月
阅读(1231)
评论(0)
推荐(0)
摘要:
过去研究过高斯金字塔,不过今天看来,当时似乎搞错了,金字塔上下层应该是采样的关系,而不是缩放的关系,而且不同层的sigma应该也有所不同。 拉普拉斯金字塔在图像融合中有所应用,方法是首先对两个待融合图像求拉普拉斯残差金字塔,然后用模板对每一级残差图像进行融合得到融合后图像的残差金字塔,然后对这个金字 阅读全文
posted @ 2020-09-10 16:38
一杯清酒邀明月
阅读(1040)
评论(0)
推荐(0)
摘要:
RANSAC在图像拼接中有所使用,有时候也在图像理解的相关算法中有所使用。 算法简介如下(摘自《图像处理、分析与机器视觉(第3版)》): 1.假设我们要将n个数据点X={x1,x1,...,xn}拟合为一个由至少m个点决定的模型(m<=n,对于直线,m=2)。(我这里实际是两个不同均值、协方差高斯分 阅读全文
posted @ 2020-09-10 16:37
一杯清酒邀明月
阅读(570)
评论(0)
推荐(0)
摘要:
曾经想要实现过Bertalmio图像修复算法,无奈自身实力不够,耗费两天时间也没能实现。昨天博客上有人问到TV模型,这个模型我过去是没听说过的,于是就找来相关论文研究了一下,发现TV模型也可以用来修复图像,于是就有了想实现的想法。用到的偏微分方程技巧和各项异性扩散很像。 先看看效果吧: 原lena: 阅读全文
posted @ 2020-09-10 16:35
一杯清酒邀明月
阅读(600)
评论(0)
推荐(1)
摘要:
radon变换就是图像在不同方向上的投影。 下图f(x,y)可以代表图像,R(x')就是图像向右下方的投影。 数学上是按投影方向进行线积分,在图像领域就是按照投影方向累加像素就行了。 matlab中有radon函数,为了熟悉原理我又写了一个。 通过旋转图像映射,效率不怎么样。 canny后Lena: 阅读全文
posted @ 2020-09-10 16:33
一杯清酒邀明月
阅读(1879)
评论(0)
推荐(0)
摘要:
普通的直方图就是统计图像中像素灰度出现的次数。 二维直方图的其中一维就是普通的直方图,即统计图像中像素灰度出现的次数。 另一维的概念就比较模糊了,我看很多论文中都是用的当前像素邻域均值灰度出现的次数。按照这个意思,其实用当前像素邻域中值灰度出现的次数也是可以的。或者用什么厉害的算法处理一下,在统计出 阅读全文
posted @ 2020-09-10 16:30
一杯清酒邀明月
阅读(2743)
评论(0)
推荐(0)
摘要:
中值滤波是很经典的算法了。今天看论文又知道还有一种叫自适应中值滤波的算法RAMF。 RAMF主要通过以下两步来处理图像。 1.首先确定最大的滤波半径,然后用一个合适的半径r对图像进行滤波。计算当前滤波半径像素灰度的Imin,Imax,Imed,然后判断Imed是否在[Imin,Imax]中间,如果在 阅读全文
posted @ 2020-09-10 16:29
一杯清酒邀明月
阅读(1750)
评论(1)
推荐(1)
摘要:
目标内边界的像素全都在目标里面,目标外边界的像素全都不在目标上,是包围着目标的。 二值图像内外边界的计算都是有两种方法的,所以一共是4种算法,不过实际用到跟踪的只有一个而已。 首先是内边界跟踪: 第一种方法不是跟踪方法。步骤是先对原图像腐蚀,然后用原图像减去腐蚀后的图像就得到边界了。 第二种方法是跟 阅读全文
posted @ 2020-09-10 16:28
一杯清酒邀明月
阅读(1062)
评论(0)
推荐(0)
摘要:
主要是用来平滑图像的,克服了高斯模糊的缺陷,各向异性扩散在平滑图像时是保留图像边缘的(和双边滤波很像)。 通常我们有将图像看作矩阵的,看作图的,看作随机过程的,记得过去还有看作力场的。 这次新鲜,将图像看作热量场了。每个像素看作热流,根据当前像素和周围像素的关系,来确定是否要向周围扩散。比如某个邻域 阅读全文
posted @ 2020-09-10 16:25
一杯清酒邀明月
阅读(363)
评论(0)
推荐(0)
摘要:
很多算法都用到了这个矩阵,比如Hessian affine region detector、SURF,虽然这些算法我还没有完全搞透,不过那都是后话,先把这个矩阵搞出来再说,学习是不断迭代的过程。 整个矩阵的形成主要由四部分公式决定: g(x,y)就是高斯函数了,没啥可说的: 对高斯函数的x和y分别求 阅读全文
posted @ 2020-09-10 16:24
一杯清酒邀明月
阅读(1732)
评论(0)
推荐(0)
摘要:
今天在看局部熵方面的内容,看论文中介绍的内容感觉局部熵挺容易了,于是就有了实现的想法,结果效果非常糟糕。 得到的几乎是一张空白的图片,就像下面一样: 究其原因是各种论文上都写了这样一个公式: 这里f(i,j)就是在m*n这个局部的像素,这个没问题,不过这里的p是什么东西,按这里的定义p是当前像素灰度 阅读全文
posted @ 2020-09-10 16:23
一杯清酒邀明月
阅读(1512)
评论(1)
推荐(1)
摘要:
老物了,网上的例子多的数不过来。不过我还是有必要练习一下的。 之所以看这个算法是因为最近在看颜色聚合向量时,有的论文用到了最小生成树,因此我就拿来熟悉一下。 Kruskal算法类似于连通分支算法,感觉和过去实现过的连通区域标记算法非常像。 步骤: 1.对于一个图,将图的每条边提取出来从小到大进行排序 阅读全文
posted @ 2020-09-10 16:21
一杯清酒邀明月
阅读(858)
评论(0)
推荐(0)
摘要:
一种图像特征的提取算法。 算法步骤: 1.用3*3的模板对图像每个像素进行处理,比较当前像素和周围像素的大小,将大于当前像素的置1,小于的置0。 2.对这周围八个像素进行编码,这八个0和1正好是可以组成一个byte数,然后按一定的规则组成这个无符号数。 3.把这个数赋值给当前像素。 4.通常对处理后 阅读全文
posted @ 2020-09-10 16:20
一杯清酒邀明月
阅读(566)
评论(0)
推荐(0)
摘要:
K最邻近密度估计技术是一种分类方法,不是聚类方法。 不是最优方法,实践中比较流行。 通俗但不一定易懂的规则是: 1.计算待分类数据和不同类中每一个数据的距离(欧氏或马氏)。 2.选出最小的前K数据个距离,这里用到选择排序法。 3.对比这前K个距离,找出K个数据中包含最多的是那个类的数据,即为待分类数 阅读全文
posted @ 2020-09-10 16:19
一杯清酒邀明月
阅读(712)
评论(0)
推荐(0)
摘要:
这里的环境是windows7+vs2010+matlabR2010b 上一篇是通过engine来调用matlab中的语句,本篇是通过调用m文件编译成的h/lib/dll文件而实现的。 首先写一个函数mysvd.m: 1 function [s v d]=mysvd(a) 2 [s v d]=svd( 阅读全文
posted @ 2020-09-10 16:18
一杯清酒邀明月
阅读(908)
评论(0)
推荐(0)
摘要:
早知道有向图和无向图差别没有想象中的大我就写到一起了。 函数中使用的arrow画箭头函数是在这个网站下的。 1 %函数名netplot 2 %使用方法输入请help netplot 3 %无返回值 4 %函数只能处理有向图 5 %作者:tiandsp 6 %最后修改:2012.12.26 7 fun 阅读全文
posted @ 2020-09-10 16:16
一杯清酒邀明月
阅读(1530)
评论(0)
推荐(0)
摘要:
寝室有一个是做网络的,需要把矩阵变为网络图使其形象一点,所以我在这里就写了这样一个函数。 功能是将邻接矩阵或关联矩阵变为网络图,不过我这里只能转换为无向图,有向图的箭头我还需要在研究一下,似乎有annotation函数可以调用。 1 %函数名netplot 2 %使用方法输入请help netplo 阅读全文
posted @ 2020-09-10 16:15
一杯清酒邀明月
阅读(909)
评论(0)
推荐(0)
摘要:
这个YCbCr是从YUV派生出来的,比较适合处理数字图像,JPEG压缩就是在这个彩色空间中处理的。变换公式。 1 clear all; 2 close all; 3 clc; 4 5 img=imread('lena_color.jpg'); 6 %img=mat2gray(img); %任意区间映 阅读全文
posted @ 2020-09-10 15:59
一杯清酒邀明月
阅读(1156)
评论(0)
推荐(0)
摘要:
这里的变换公式是模拟领域的公式,这里虽然是数字图像,不过也可以这样写,YCbCr采样另外的公式。 1 clear all; 2 close all; 3 clc; 4 5 img=imread('lena_color.jpg'); 6 img=mat2gray(img); %任意区间映射到[0,1] 阅读全文
posted @ 2020-09-10 15:57
一杯清酒邀明月
阅读(618)
评论(0)
推荐(0)
摘要:
色相饱和度明度和三原色的相互转换 1 clear all; 2 close all; 3 clc; 4 5 img=imread('lena_color.jpg'); 6 img=mat2gray(img); %任意区间映射到[0,1]; 7 [m n dim]=size(img); 8 imsho 阅读全文
posted @ 2020-09-10 15:56
一杯清酒邀明月
阅读(689)
评论(0)
推荐(0)
摘要:
直方图匹配或叫做直方图规定化都可以,是把原图像的直方图按照给定的直方图加以映射,使新图像的直方图的分布类似于给定的函数。 总共有以下几步: 1.求给定的函数的累积直方图s。 2.求原图像的累积直方图G。 3.求s中每一个值在G中距离最小的位置index。 4.求原图像每个像素通过index映射到的新 阅读全文
posted @ 2020-09-10 15:55
一杯清酒邀明月
阅读(1559)
评论(0)
推荐(0)
摘要:
双边滤波模板主要有两个模板生成,第一个是高斯模板,第二个是以灰度级的差值作为函数系数生成的模板。然后这两个模板点乘就得到了最终的双边滤波模板。 第一个模板是全局模板,所以只需要生成一次。第二个模板需要对每个像素都计算一次,所以需要放到循环的里面来生成,这很像表面模糊啊。哦,表面模糊就是用了一个截尾滤 阅读全文
posted @ 2020-09-10 15:54
一杯清酒邀明月
阅读(1957)
评论(0)
推荐(0)
摘要:
其实写过一步法二值图像连通区域标记之后我就感觉这个标记和填充基本上是一回事,所以我这里就用了一步法的那个队列算法。也没什么好说的,算法几乎一样,就是细节的区别。还有这里使用了ginput函数。至于堆栈版的实现,看情况吧。 1 clear all; 2 close all; 3 clc; 4 5 im 阅读全文
posted @ 2020-09-10 15:52
一杯清酒邀明月
阅读(750)
评论(0)
推荐(0)
摘要:
我几乎完全就是照着WIKI百科上的算法实现的,不过是用Matlab而已。使用了两步法进行标记,一步法我还没怎么看。两步法中第二步是比较麻烦的,其中用到了不相交集合的一些理论,尤其是不相交集合森林,我这里的find_set函数就是参考《算法导论》311页的算法写的。如果用c++写,也许需要自己构造数据 阅读全文
posted @ 2020-09-10 15:50
一杯清酒邀明月
阅读(1407)
评论(0)
推荐(0)
摘要:
这个只需要遍历一次图像就能够完全标记了。我主要参考了WIKI和这位兄弟的博客,这两个把原理基本上该介绍的都介绍过了,我也不多说什么了。一步法代码相比两步法真是清晰又好看,似乎真的比两步法要好很多。 代码如下: 1 clear all; 2 close all; 3 clc; 4 5 img=imre 阅读全文
posted @ 2020-09-10 15:49
一杯清酒邀明月
阅读(1040)
评论(0)
推荐(0)
摘要:
霍夫变换是把原图像中的直线上的每一个点转换到参数空间对应的曲线上,由于每一个点对应一条曲线,因此在参数空间中所有曲线会相交到一个点,形成一个最值。因此原图寻找直线斜率的问题就变成了参数空间寻找最值的问题了。 代码如下: 1 clear all; 2 close all; 3 clc; 4 5 6 % 阅读全文
posted @ 2020-09-10 15:47
一杯清酒邀明月
阅读(787)
评论(0)
推荐(0)
摘要:
有好多算法早就想实现了,可是总有各种原因没有实现,这个双线性插值旋转图像就是其中之一。 之前写过最邻近插值旋转图像,结合着看效果会很好。 1 clear all; 2 close all; 3 clc; 4 5 jiaodu=45; %要旋转的角度,旋转方向为顺时针 6 img=imread('le 阅读全文
posted @ 2020-09-10 15:46
一杯清酒邀明月
阅读(1356)
评论(0)
推荐(0)
摘要:
半年前写过matlab最邻近插值的图像缩放,没怎么考虑边界问题。更早之前用Opencv写过双线性插值图像放大,不过写的比较混乱。所以这里用matlab重新再清楚的写一遍。 1 close all; 2 clear all; 3 clc; 4 5 m=1.8; %放大或缩小的高度 6 n=2.3; % 阅读全文
posted @ 2020-09-10 15:44
一杯清酒邀明月
阅读(2303)
评论(0)
推荐(0)
摘要:
关于这个meanshift,一来可以用来作为目标跟踪,二来可以用来进行图像聚类。我这里只实现了图像聚类,当然,是按自己的理解编写的程序。至于目标跟踪将来一定也是要实现的,因为我最初看这个算法的原因就是想用他来跟踪目标的。 meanshift的基本原理我就不介绍了,比起我的介绍,网上有不少牛人们比我解 阅读全文
posted @ 2020-09-10 15:42
一杯清酒邀明月
阅读(1068)
评论(0)
推荐(0)
摘要:
这个算法是Lee和Seung在1999年发表在nature杂志上的。具体论文看这里:http://www.seas.upenn.edu/~ddlee/Papers/nmf.pdf。 看不懂英文没关系,可以看这个中文的介绍:http://wenku.baidu.com/view/94c8af0bf78 阅读全文
posted @ 2020-09-10 15:40
一杯清酒邀明月
阅读(611)
评论(0)
推荐(0)
摘要:
我真是弱爆了,我原来以为边界处理用我上一篇的方法就能很好的处理了,结果效果并不好。我只是和标准的imfilter函数进行了比较,其实imfilter函数还有一些参数我没用上,比如‘replicate’,'symmetric'等,如果加上这些参数,我的效果就比不上matlab的效果了,所以这次不用上一 阅读全文
posted @ 2020-09-10 15:39
一杯清酒邀明月
阅读(408)
评论(0)
推荐(0)
摘要:
我们在写滤波程序时一般会用矩阵模板与原图像做卷积,这时候在做图像边界的处理是一般都选择忽略边缘,不过要是模板比较大,那么处理的效果就不好了,图像四周就会是原图像,中间才是滤波后的结果,虽然用Matlab的imfilter就能解决,不过还是自己通过滤波的原理实践一下比较好。 模板和图像一共有如下16种 阅读全文
posted @ 2020-09-10 15:37
一杯清酒邀明月
阅读(1098)
评论(0)
推荐(0)
摘要:
这里所谓的张量和黎曼那里的张量是不一样的,那个张量更多的用在物理上,这个张量就是矩阵的扩展。比如零阶张量就是数,一阶张量就是向量,二阶张量就是矩阵,三阶四阶就是更高维的数的集合。这个领域现在在数学上还都是很新的东西,矩阵的秩我们都知道怎么求,但是三维的张量或更高维的张量的秩现在在数学上也没有结果。至 阅读全文
posted @ 2020-09-10 15:35
一杯清酒邀明月
阅读(790)
评论(0)
推荐(0)
摘要:
介绍一下奇异值分解来压缩图像。今年的上半年中的一篇博客贴了一篇用奇异值分解处理pca问题的程序,当时用的是图像序列,是把图像序列中的不同部分分离开来。这里是用的不是图像序列了,只是单单的一幅图像,所以直接就对图像矩阵进行svd了。 吴军的《数学之美》里其实已经介绍过用svd进行大数据的压缩了,不过我 阅读全文
posted @ 2020-09-10 15:33
一杯清酒邀明月
阅读(1067)
评论(0)
推荐(1)
摘要:
1 mov=aviread('out.avi'); %读入存在e盘的电影x.avi 2 %movie(mov); %放映电影 3 4 %将电影转成图片序列 5 fnum=size(mov,2); %读取电影的祯数 6 for i=1:fnum 7 strtemp=strcat('C:\Users\t 阅读全文
posted @ 2020-09-10 15:32
一杯清酒邀明月
阅读(424)
评论(0)
推荐(0)
摘要:
1 for i=1:40 2 fname=strcat('C:\Users\tc\Desktop\test\1 (',int2str(i),').bmp'); 3 im(:,:,i)=imread(fname); 4 imshow(im(:,:,i)) 5 M(i) = getframe; 6 en 阅读全文
posted @ 2020-09-10 15:30
一杯清酒邀明月
阅读(302)
评论(0)
推荐(0)
摘要:
HSoptflow.m 1 function [us,vs] = HSoptflow(Xrgb,n) 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3 % Author: Gregory Power gregory.p 阅读全文
posted @ 2020-09-10 15:29
一杯清酒邀明月
阅读(726)
评论(0)
推荐(0)
摘要:
1 clear all; 2 close all; 3 clc; 4 n=40; 5 6 point=load('point.mat'); 7 current_point=point.point; 8 9 plot(current_point(:,1),current_point(:,2),'r') 阅读全文
posted @ 2020-09-10 15:28
一杯清酒邀明月
阅读(538)
评论(0)
推荐(0)
摘要:
1 clear all; 2 close all; 3 clc; 4 5 randn('seed',0); 6 %%一维高斯函数 7 mu=0; 8 sigma=1; 9 x=-6:0.1:6; 10 y=normpdf(x,mu,sigma); 11 plot(x,y); 12 figure; 1 阅读全文
posted @ 2020-09-10 15:27
一杯清酒邀明月
阅读(2049)
评论(0)
推荐(0)
摘要:
1 clear all; 2 close all; 3 clc; 4 5 randn('seed',0); 6 %{ 7 一维情况 8 mu=0; 9 N=100000; 10 S=5; 11 data=mvnrnd(mu,S,N); 12 me=mean(data); 13 S2=1/N*sum( 阅读全文
posted @ 2020-09-10 15:26
一杯清酒邀明月
阅读(1305)
评论(0)
推荐(0)
摘要:
1 clear all; 2 close all; 3 clc; 4 5 randn('seed',0); 6 mu1=[0 0]; 7 S1=[0.3 0;0 0.35]; 8 cls1_data=mvnrnd(mu1,S1,1000); 9 plot(cls1_data(:,1),cls1_da 阅读全文
posted @ 2020-09-10 15:25
一杯清酒邀明月
阅读(403)
评论(0)
推荐(0)
摘要:
1 close all; 2 clc; 3 H=1; %索引pix中第一个元素,即高度 4 W=2; %索引pix中第二个元素,即宽度 5 left_right=0.3; %抬起左边或右边时值为0-1之间,不抬起时为0 6 up_down=0; %抬起上边或下边时值为0-1之间,不抬起时为0 7 8 阅读全文
posted @ 2020-09-10 15:24
一杯清酒邀明月
阅读(621)
评论(0)
推荐(0)
摘要:
1 close all; 2 clear all; 3 clc; 4 5 img=imread('rice.png'); 6 imshow(img); 7 [m n]=size(img); 8 9 tmp=zeros(m+2,n+2); 10 tmp(2:m+1,2:n+1)=img; 11 Ix= 阅读全文
posted @ 2020-09-10 15:22
一杯清酒邀明月
阅读(449)
评论(0)
推荐(0)
摘要:
1 cl; 2 H=1; %索引pix中第一个元素,即高度 3 W=2; %索引pix中第二个元素,即宽度 4 jiaodu=45; %要旋转的角度,旋转方向为顺时针 5 img=imread('Corner.png'); %这里v为原图像的高度,u为原图像的宽度 6 imshow(img); %这 阅读全文
posted @ 2020-09-10 15:21
一杯清酒邀明月
阅读(823)
评论(0)
推荐(0)
摘要:
1 cl; 2 w=0.6; %放大或缩小的宽度 3 h=1.4; %放大或缩小的高度 4 img=imread('Corner.png'); 5 imshow(img); 6 [m n]=size(img); 7 imgn=zeros(h*m,w*n); 8 9 rot=[h 0 0;0 w 0; 阅读全文
posted @ 2020-09-10 15:20
一杯清酒邀明月
阅读(948)
评论(0)
推荐(0)
摘要:
1 cl; 2 img1=imread('gaosi.jpg'); 3 [m,n]=size(img1); 4 w=fspecial('gaussian',[3 3]); 5 img2=imresize(imfilter(img1,w),[m/2 n/2]); 6 img3=imresize(imf 阅读全文
posted @ 2020-09-10 15:19
一杯清酒邀明月
阅读(529)
评论(1)
推荐(0)
摘要:
1 cl; 2 img=imread('mask.jpg'); 3 imshow(img); 4 [x,y]=size(img); 5 img_man=zeros(x,y); 6 img_com=zeros(x,y); 7 8 %% 直方图均衡化算法 9 Max=max(max(img)); 10 阅读全文
posted @ 2020-09-10 15:18
一杯清酒邀明月
阅读(782)
评论(0)
推荐(0)
摘要:
1 cl; 2 m=31; 3 n=31; 4 img=zeros(m+1,n+1); 5 img=double(img); 6 pi=3.1415926; 7 sigma=10; 8 for i=-(m/2):m/2 9 for j=-(n/2):n/2 10 img(i+m/2+1,j+n/2+ 阅读全文
posted @ 2020-09-10 15:17
一杯清酒邀明月
阅读(557)
评论(0)
推荐(0)
摘要:
1 cl; 2 raw=zeros(200,256,30); 3 for i=1:30 4 filename=strcat('F:\算法实验\data\seq3\',int2str(i),'.bmp'); 5 raw(:,:,i)=imread(filename); 6 end 7 8 方法二: 9 阅读全文
posted @ 2020-09-10 15:16
一杯清酒邀明月
阅读(443)
评论(0)
推荐(0)
摘要:
1 cl; 2 img_gray=imread('fupeng.jpg'); 3 img_erzhi=imread('erzhi_fupeng.jpg'); 4 imshow(img_gray) 5 figure,imshow(img_erzhi) 6 [m n]=size(img_gray); 7 阅读全文
posted @ 2020-09-10 15:15
一杯清酒邀明月
阅读(816)
评论(0)
推荐(0)
摘要:
1 cl; 2 img=imread('1.bmp'); 3 img=double(img); 4 imshow(mat2gray(img)); 5 6 [m n]=size(img); 7 imgn=zeros(m-3,n-3); 8 temp=[]; 9 for i=1:m-3 10 for j 阅读全文
posted @ 2020-09-10 15:14
一杯清酒邀明月
阅读(407)
评论(0)
推荐(0)
摘要:
1 clear; 2 clc; 3 width=3; 4 xwidth=(width-1)/2; 5 imgn=imread('1.bmp'); 6 imshow(imgn,[]); 7 imgn=double(imgn); 8 [m n]=size(imgn); 9 imgn1=imgn; 10 阅读全文
posted @ 2020-09-10 15:13
一杯清酒邀明月
阅读(528)
评论(0)
推荐(0)
摘要:
1 clear; 2 clc; 3 width=3; 4 xwidth=(width-1)/2; 5 imgn=imread('1.bmp'); 6 imshow(imgn,[]); 7 imgn=double(imgn); 8 [m n]=size(imgn); 9 imgn1=imgn; 10 阅读全文
posted @ 2020-09-10 15:12
一杯清酒邀明月
阅读(447)
评论(0)
推荐(0)
摘要:
1 cl; 2 3 img=imread('3.17.tif'); 4 imgn=imnoise(img,'salt & pepper',0.02); 5 [m n]=size(img); 6 7 %h=fspecial('average',[3 3]); % 3*3的均值滤波 8 %imgn1=i 阅读全文
posted @ 2020-09-10 15:11
一杯清酒邀明月
阅读(405)
评论(0)
推荐(0)
摘要:
1 cl; 2 img=imread('15.bmp'); 3 %img=double(img); 4 f=fft2(img); %傅里叶变换 5 f=fftshift(f); %使图像对称 6 r=real(f); %图像频域实部 7 i=imag(f); %图像频域虚部 8 margin=log 阅读全文
posted @ 2020-09-10 15:09
一杯清酒邀明月
阅读(6008)
评论(4)
推荐(1)
摘要:
1 cl; 2 img=imread('15.bmp'); 3 %imshow(img); 4 [m n]=size(img); 5 max=0; 6 min=256; 7 avg=0; 8 for i=1:1:m 9 for j=1:1:n 10 if img(i,j)<min 11 min=im 阅读全文
posted @ 2020-09-10 15:08
一杯清酒邀明月
阅读(1332)
评论(0)
推荐(0)
摘要:
本练习程序是受到了这个老外博文的启发,感觉挺有意思,就尝试了一下。他用的是opencv,我这里用的是matlab。 过去写过透视投影,当时是用来做倾斜校正的,这次同样用到了透视投影,不过更有意思,是将一张图像贴到另一张图像上。 两个透视投影都需要先计算投影矩阵,倾斜校正那一篇是通过解线性方程组求的变 阅读全文
posted @ 2020-09-10 15:06
一杯清酒邀明月
阅读(326)
评论(0)
推荐(0)
摘要:
又是计算几何,我感觉最近对计算几何上瘾了。 当然,工作上也会用一些,不过工作上一般直接调用boost的geometry库。 上次写过最小包围圆,这次是最小包围矩形,要比最小包围圆复杂些。 最小包围矩形可不一定是个直立的矩形,也可能像下图一样是倾斜的。 求法如下: 1.求多边形凸包,这里凸包直接调用系 阅读全文
posted @ 2020-09-10 15:04
一杯清酒邀明月
阅读(851)
评论(0)
推荐(0)
摘要:
还是计算几何, 多边形的核可以这样理解:这个核为原多边形内部的一个多边形,站在这个叫核的多边形中,我们能看到原多边形的任何一个位置。 算法步骤如下: 1.根据原多边形最大和最小的x,y初始化核多边形,就是个矩形。 2.计算多边形当前处理的点的凹凸性。 3.用当前点与其后继点构成直线,判断当前点的前驱 阅读全文
posted @ 2020-09-10 15:03
一杯清酒邀明月
阅读(319)
评论(0)
推荐(0)
摘要:
这个算子算是图像历史上第一个特征点提取算法了,1977年提出的,很简单,拿来练手很合适。 算法原理如下: 1.选取一个合理的邻域遍历图像,这里是5*5邻域的。在邻域中依次计算,垂直,水平,对角与反对角四个相邻像素灰度的差的平方和,作为该邻域特征值。 大致就是下面这个样子: 公式: 这里k是窗口的半径 阅读全文
posted @ 2020-09-10 15:02
一杯清酒邀明月
阅读(520)
评论(0)
推荐(0)
摘要:
我手机上有一个软件实现了很多图像滤镜,挺有意思,我打算都尝试一下。 这个滤镜主要是实现老照片效果。 代码很短,我就不详细介绍了。 原图: 处理后效果: matlab代码如下: 1 clear all;close all;clc; 2 3 img=imread('lena_rgb.jpg'); 4 [ 阅读全文
posted @ 2020-09-10 15:01
一杯清酒邀明月
阅读(417)
评论(0)
推荐(0)
摘要:
1 clear all; 2 close all; 3 clc; 4 5 %生成两组已标记数据 6 randn('seed',1); 7 mu1=[0 0]; 8 S1=[0.5 0; 9 0 0.5]; 10 P1=mvnrnd(mu1,S1,100); 11 12 mu2=[0 6]; 13 S 阅读全文
posted @ 2020-09-10 14:59
一杯清酒邀明月
阅读(394)
评论(0)
推荐(0)
摘要:
注:这里的练习鉴于当时理解不完全,可能会有些错误,关于神经网络的实践可以参考我的这篇博文 这里的代码只是简单的练习,不涉及代码优化,也不涉及神经网络优化,所以我用了最能体现原理的方式来写的代码。 激活函数用的是h = 1/(1+exp(-y)),其中y=sum([X Y].*w)。 代价函数用的是E 阅读全文
posted @ 2020-09-10 14:57
一杯清酒邀明月
阅读(1075)
评论(0)
推荐(0)
摘要:
需要看下生成的数据在地球上的经纬度具体位置。 投影为墨卡托投影。 1 clear all; 2 close all; 3 clc; 4 5 load coast; 6 a=load('out.txt'); %自己的经纬度数据 7 8 axesm mercator 9 plotm(lat,long); 阅读全文
posted @ 2020-09-10 14:55
一杯清酒邀明月
阅读(1638)
评论(1)
推荐(0)
摘要:
最近在分析一些数据,就是数据拟合的一些事情,用到了matlab的polyfit函数,效果不错。 因此想了解一下这个多项式具体是如何拟合出来的,所以就搜了相关资料。 这个文档介绍的还不错,我估计任何一本数值分析教材上讲的都非常清楚。 推导就不再写了,我主要参考下面两页PPT,公式和例子讲的比较清楚。 阅读全文
posted @ 2020-09-10 14:53
一杯清酒邀明月
阅读(799)
评论(0)
推荐(0)
摘要:
这个算是ICP算法中的一个关键步骤,单独拿出来看一下。 算法流程如下: 1.首先得到同名点集P和X。 2.计算P和X的均值up和ux。 3.由P和X构造协方差矩阵sigma。 4.由协方差矩阵sigma构造4*4对称矩阵Q。 5.计算Q的特征值与特征向量。其中Q最大特征值对应的特征向量即为最佳旋转向 阅读全文
posted @ 2020-09-10 14:44
一杯清酒邀明月
阅读(572)
评论(0)
推荐(0)
摘要:
计算步骤如下: 下面使用书中的练习y=exp(a*x^2+b*x+c)+w这个模型验证一下,其中w为噪声,a、b、c为待解算系数。 代码如下: 1 clear all; 2 close all; 3 clc; 4 5 a=1;b=2;c=1; %待求解的系数 6 7 x=(0:0.01:1)'; 8 阅读全文
posted @ 2020-09-10 14:42
一杯清酒邀明月
阅读(1233)
评论(0)
推荐(0)
摘要:
上一篇博客中介绍的高斯牛顿算法可能会有J'*J为奇异矩阵的情况,这时高斯牛顿法稳定性较差,可能导致算法不收敛。比如当系数都为7或更大的时候,算法无法给出正确的结果。 Levenberg-Marquardt法一定程度上修正了这个问题。 计算迭代系数deltaX公式如下: 当lambda很小的时候,H占 阅读全文
posted @ 2020-09-10 14:41
一杯清酒邀明月
阅读(1009)
评论(0)
推荐(0)
摘要:
算法思想:如果一个像素与它邻域的像素差别较大(过亮或过暗) , 那它更可能是角点。 算法步骤: 1.上图所示,一个以像素p为中心,半径为3的圆上,有16个像素点(p1、p2、...、p16)。 2.定义一个阈值。计算p1、p9与中心p的像素差,若它们绝对值都小于阈值,则p点不可能是特征点,直接pas 阅读全文
posted @ 2020-09-10 14:39
一杯清酒邀明月
阅读(513)
评论(0)
推荐(0)
摘要:
本篇我们使用SVD计算点集配准。 下面是《视觉slam十四讲》中的计算方法: 计算步骤如下: 我们看到,只要求出了两组点之间的旋转,平移是非常容易得到的,所以我们重点关注R的计算。展开关于R的误差项,得: 注意到第一项和R无关,第二项由于R'R=I,亦与R无关。因此,实际上优化目标函数变为: 接下来 阅读全文
posted @ 2020-09-10 14:38
一杯清酒邀明月
阅读(674)
评论(0)
推荐(0)
摘要:
这里用到的还是最小二乘方法,和上一次这篇文章原理差不多。 就是首先构造最小二乘函数,然后对每一个系数计算偏导,构造矩阵乘法形式,最后解方程组。 比如有一个二次曲面:z=ax^2+by^2+cxy+dx+ey+f 首先构造最小二乘函数,然后计算系数偏导(我直接手写了): 解方程组(下图中A矩阵后面求和 阅读全文
posted @ 2020-09-10 14:37
一杯清酒邀明月
阅读(1293)
评论(0)
推荐(0)
摘要:
通常我们使用的最小二乘都需要预先设定一个模型,然后通过最小二乘方法解出模型的系数。 而大多数情况是我们是不知道这个模型的,比如这篇博客中z=ax^2+by^2+cxy+dx+ey+f 这样的模型。 局部加权线性最小二乘就不需要我们预先知道待求解的模型,因为该方法是基于多个线性函数的叠加,最终只用到了 阅读全文
posted @ 2020-09-10 14:35
一杯清酒邀明月
阅读(933)
评论(0)
推荐(0)
摘要:
问题是这样,如果我们知道两个向量v1和v2,计算从v1转到v2的旋转矩阵和四元数,由于旋转矩阵和四元数可以互转,所以我们先计算四元数。 我们可以认为v1绕着向量u旋转θ角度到v2,u垂直于v1-v2平面。 四元数q可以表示为cos(θ/2)+sin(θ/2)u,即:q0=cos(θ/2), 阅读全文
posted @ 2020-09-10 14:34
一杯清酒邀明月
阅读(2017)
评论(0)
推荐(2)
摘要:
欧拉角转旋转矩阵公式: 旋转矩阵转欧拉角公式: 旋转矩阵转四元数公式,其中1+r11+r22+r33>0: 四元数转旋转矩阵公式,q0^2+q1^2+q2^2+q3^2=1: 欧拉角转四元数公式: 四元数转欧拉角公式: matlab代码如下: 1 clear all; 2 close all; 3 阅读全文
posted @ 2020-09-10 14:32
一杯清酒邀明月
阅读(4802)
评论(0)
推荐(0)
摘要:
下面三个公式分别是一次、二次和三次贝塞尔曲线公式: 通用的贝塞尔曲线公式如下: 可以看出,系数是由一个杨辉三角组成的。 这里的一次或者二次三次由控制点个数来决定,次数等于控制点个数-1。 实现的效果如下: 代码如下: 1 clear all; 2 close all; 3 clc; 4 5 p=gi 阅读全文
posted @ 2020-09-10 14:31
一杯清酒邀明月
阅读(1621)
评论(0)
推荐(0)
摘要:
DBSCAN全称Density-Based Spatial Clustering of Applications with Noise,是一种密度聚类算法。 和Kmeans相比,不需要事先知道数据的类数。 以编程的角度来考虑,具体算法流程如下: 1.首先选择一个待处理数据。 2.寻找和待处理数据距离 阅读全文
posted @ 2020-09-10 14:30
一杯清酒邀明月
阅读(1784)
评论(0)
推荐(1)
摘要:
算法思路是首先建立kd树,然后找到每个点距离最近的点的距离,对距离求和再求平均即可。 代码如下: 1 clear all; 2 close all; 3 clc; 4 5 pc = pcread('rabbit.pcd'); 6 pc = pcdownsample(pc,'random',0.1); 阅读全文
posted @ 2020-09-10 14:28
一杯清酒邀明月
阅读(467)
评论(0)
推荐(0)
摘要:
最近接触点云比较多,如果把图像投影到点云应该挺有意思。 首先需要载入图像,然后做个球或其他什么形状的点云,这里可以参考球坐标公式。 最后通过pcshow将像素输出到点云上即可。 原图: 投影后的点云: 代码如下: 1 clear all; 2 close all; 3 clc; 4 5 img = 阅读全文
posted @ 2020-09-10 14:27
一杯清酒邀明月
阅读(790)
评论(0)
推荐(0)
摘要:
比如有图像1,将其旋转n度得到图像2,问如何比较两张图像得到旋转的度数n。 算法思路参考logpolar变换: 1.从图像中心位置向四周引出射线。 2.计算每根射线所打到图像上的像素累计和,得到极坐标灰度曲线。 3.比较两张图的灰度曲线,得到最相关的偏移位置,即为两张图像的旋转角度。 原图: 旋转了 阅读全文
posted @ 2020-09-10 14:25
一杯清酒邀明月
阅读(2267)
评论(0)
推荐(0)
摘要:
非刚性常微分方程的数值解法通常会用四阶龙格库塔算法,其matlab函数对应ode45。 对于dy/dx = f(x,y),y(0)=y0。 其四阶龙格库塔公式如下: 对于通常计算,四阶已经够用,四阶以上函数f(x,y)计算工作量大大增加而精度提高较慢。 下面以龙格库塔法解洛伦兹方程为例: matla 阅读全文
posted @ 2020-09-10 14:23
一杯清酒邀明月
阅读(4204)
评论(0)
推荐(0)
摘要:
最近新型冠状病毒疫情越来越严重了,待在家中没法出去,学习一下经典传染病模型。 这里总结了五个模型,分别是SI模型,SIS模型,SIR模型,SIRS模型,SEIR模型。 这几种模型的特点先介绍一下。 首先定义SEIR: S为易感者 (Susceptible),指未得病者,但缺乏免疫能力,与感染者接触后 阅读全文
posted @ 2020-09-10 14:22
一杯清酒邀明月
阅读(5039)
评论(0)
推荐(0)
摘要:
模拟退火首先从某个初始候选解开始,当温度大于0时执行循环。 在循环中,通过随机扰动产生一个新的解,然后求得新解和原解之间的能量差,如果差小于0,则采用新解作为当前解。 如果差大于0,则采用一个当前温度与能量差成比例的概率来选择是否接受新解。温度越低,接受的概率越小,差值越大,同样接受概率越小。 是否 阅读全文
posted @ 2020-09-10 14:11
一杯清酒邀明月
阅读(414)
评论(0)
推荐(0)
摘要:
过去也写过透视变换,当时算法真是弱爆了,我竟然会通过两次变换。不过那引用的三篇文章都是非常好的文章,直到今天我才看明白。所谓的倾斜校正,一定要有标定点,将一个倾斜的矩形变为不倾斜的。因此可以从原四边形四个点和新矩形四个点得到一个变换矩阵,根据这个矩阵再作用到全局图像就可以了。详细原理在这里,MIT的 阅读全文
posted @ 2020-09-10 14:09
一杯清酒邀明月
阅读(1543)
评论(1)
推荐(1)
摘要:
HOG(Histogram of Oriented Gradient)方向梯度直方图,主要用来提取图像特征,最常用的是结合svm进行行人检测。 算法流程图如下(这篇论文上的): 下面我再结合自己的程序,表述一遍吧: 1.对原图像gamma校正,img=sqrt(img); 2.求图像竖直边缘,水平边 阅读全文
posted @ 2020-09-10 14:08
一杯清酒邀明月
阅读(790)
评论(0)
推荐(0)
摘要:
PSNR,峰值信噪比,通常用来评价一幅图像压缩后和原图像相比质量的好坏,当然,压缩后图像一定会比原图像质量差的,所以就用这样一个评价指标来规定标准了。PSNR越高,压缩后失真越小。这里主要定义了两个值,一个是均方差MSE,另一个是峰值信噪比PSNR,公式如下: 这里的MAX通常是图像的灰度级,一般就 阅读全文
posted @ 2020-09-10 14:06
一杯清酒邀明月
阅读(655)
评论(0)
推荐(0)
摘要:
我可没直接调用系统函数,要是那样就太水了。其实我的matlab代码很容易就能翻译成c/c++的。 canny边缘检测一共四个部分: 1.对原图像高斯平滑 2.对高斯平滑后的图像进行sobel边缘检测。这里需要求横的和竖的还有联合的,所以一共三个需要sobel边缘检测图像。 3.对联合的sobel检测 阅读全文
posted @ 2020-09-10 14:03
一杯清酒邀明月
阅读(1666)
评论(0)
推荐(0)
摘要:
关于小波变换我只是有一个很朴素了理解。不过小波变换可以和傅里叶变换结合起来理解。 傅里叶变换是用一系列不同频率的正余弦函数去分解原函数,变换后得到是原函数在正余弦不同频率下的系数。 小波变换使用一系列的不同尺度的小波去分解原函数,变换后得到的是原函数在不同尺度小波下的系数。 不同的小波通过平移与尺度 阅读全文
posted @ 2020-09-10 14:02
一杯清酒邀明月
阅读(1305)
评论(0)
推荐(0)
摘要:
聚类算法,不是分类算法。 分类算法是给一个数据,然后判断这个数据属于已分好的类中的具体哪一类。 聚类算法是给一大堆原始数据,然后通过算法将其中具有相似特征的数据聚为一类。 这里的k-means聚类,是事先给出原始数据所含的类数,然后将含有相似特征的数据聚为一个类中。 所有资料中还是Andrew Ng 阅读全文
posted @ 2020-09-10 14:00
一杯清酒邀明月
阅读(538)
评论(0)
推荐(0)
摘要:
这里只是简单的实现一下,这个和直方图反向投影很像。 书上说了,“优势是理论上的,很难发展处一种满意的模板匹配技术”。 代码: 1 clear all; 2 close all; 3 clc; 4 5 img=imread('lena.jpg'); 6 imshow(img); 7 img=doubl 阅读全文
posted @ 2020-09-10 13:58
一杯清酒邀明月
阅读(926)
评论(0)
推荐(0)
摘要:
安装教程 1、在本站下载压缩包后对压缩包进行解压,有应用安装程序以及破解注册机。2、打开应用安装程序,点击下一步进入安装。3、选择接受安装协议。点击下一步。4、选择需要安装的类型,进入下一步。5、选择ACDSee15将要处理的文件类型。6、开始正式安装应用。绑定的一些插件,把勾选取消就好。7、完成安 阅读全文
posted @ 2020-09-10 11:01
一杯清酒邀明月
阅读(1077)
评论(1)
推荐(0)
摘要:
在图片上画圈圈、画箭头、写注释,用PS软件可以实现,但PS软件功能太强大,所占空间也大,而且实现起来也比较复杂,完全没有必要。用ACDSee 15的话,感觉更方便、更快捷。(写完此文之后,后来又发现还有更方便的方法,有兴趣的朋友可以点击右边我的名字,去找下我写的《在图片上画圈圈画箭头写注释最方便快捷 阅读全文
posted @ 2020-09-10 11:00
一杯清酒邀明月
阅读(2444)
评论(0)
推荐(0)
浙公网安备 33010602011771号