matlab练习程序(图像马赛克)】的更多相关文章

matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像等大的目标图像.然后用一个圆形的模板,用模板去遍历原图像每个像素,把模板内的每个像素都和模板中心像素比较,如果灰度小于一个阈值,那么就对目标图像当前和原图像相同位置的像素加一,直到结束.目标图像中在原图像是角点的位置就会取局部极小,所以做一个反向的相减.img=max(img)-img,if img…
matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram of Oriented Gradient)方向梯度直方图,主要用来提取图像特征,最常用的是结合svm进行行人检测. 算法流程图如下(这篇论文上的): 下面我再结合自己的程序,表述一遍吧: 1.对原图像gamma校正,img=sqrt(img); 2.求图像竖直边缘,水平边缘,边缘强度,边缘斜率. 3.…
使用matlab批量处理图像后在指定文件夹存储 clear;clc;close all; Files=dir('D:\文件及下载相关\文档\MATLAB\postgraduate\Kodak\*.jpg'); N=length(Files); Names={}; Images={}; :N Names{k}=Files(k).name; Images{k}=imread(['D:\文件及下载相关\文档\MATLAB\postgraduate\Kodak\' Names{k}]); figure(…
原文:Win8 Metro(C#)数字图像处理--2.43图像马赛克效果算法  [函数名称] 图像马赛克效果        MosaicProcess(WriteableBitmap src, int v) [算法说明] 图像马赛克效果其实就是将图像分成大小一致的图像块,每一个图像块都是一个正方形,并且在这个正方形中所有像素值都相等.我们可以将这个正方形看作是一个模板窗口,模板中对应的所有图像像素值都等于该模板的左上角第一个像素的像素值,这样的效果就是马赛克效果,而正方形模板的大小则决定了马…
处理原理就是将邻域像素平均值赋给邻域中的所有像素. 这里将处理方法分为了带线条和不带线条,带线条处理后的视觉效果要好些. 原图: 处理结果(不带线条): 处理结果(带线条): 代码处理的是带线条的情况. matlab代码如下: clear all; close all;clc; img=imread('lena.jpg'); imshow(img,[]); [h w]=size(img); imgn=zeros(h,w); n=; nw=floor(w/n)*n; nh=floor(h/n)*n…
十一没什么事干,接着看图像算法. 这个球面化算法最初是在ps上的球面化滤镜中看到的,感觉挺有意思,就研究了一下. 算法的详细推导可以在这篇博客中找到,我比较懒,只在纸上推了一遍,就不在博客上编辑了. 不过这里还是要把逆变换公式写一下. 公式如下: 其中R为球的半径,x,y为目标图像像素坐标,xx,yy为源图像像素坐标. 原图: 球面化后: matlab代码如下: clear all;close all;clc; img=imread('lena.jpg'); [h w]=size(img); i…
自从上次写了Hilbert图像置乱之后,就对图像置乱研究了一下,发现这里面也是有很多置乱算法的. Arnold也算一种比较主要的置乱算法,算法由以下变换公式产生: 这里a和b是参数,n是迭代次数,N是图像的高或宽. 有了正变换公式,我们还需要反变换公式,正好我最近在学Mathematica,反变换公式就是用这个软件求的. 公式如下: 两个变换矩阵正好是求逆的关系吧,手算也出来了,不过顺便熟悉一下Mathematica,何乐不为呢. 处理结果如下: 原图: 置乱后: 恢复后: matlab代码如下…
正好刚写了Hibert生成曲线,不如再加一篇应用的程序. 关于Hilbert图像置乱,我在网上搜的应用领域主要集中在数字水印和图像加密上,而这两个领域我都没怎么接触过. 大部分的图像置乱都是如下图的置乱1所示,至于置乱2则是我不小心生成的. 置乱1是先把原图按hilbert曲线进行赋值,拉成一条一维数组,再reshape成一副图像. 置乱2是先把原图reshape成一维数组,然后再按hilbert曲线进行赋值,生成一副图像. 我感觉都差不多,网上置乱1更常见些,置乱2好像就没见过,不过这都算置乱…
随机游走类似布朗运动,就是随机的向各个方向走吧. 虽然代码没什么技术含量,不过产生的图像实在太漂亮了,所以还是贴上来吧. 产生的图像: matlab代码如下: clear all;close all;clc n=; %游走的步数.也是图像中像素个数,有些位置可能重复,所以白像素小于等于n x=; %初始x坐标 y=; %初始y坐标 pix=zeros(n,); %游走产生的像素坐标 neighbour=[- -;- ;- ; -; ; -; ; ]; %当前像素邻域 :n r=floor(+*r…
介绍一下奇异值分解来压缩图像.今年的上半年中的一篇博客贴了一篇用奇异值分解处理pca问题的程序,当时用的是图像序列,是把图像序列中的不同部分分离开来.这里是用的不是图像序列了,只是单单的一幅图像,所以直接就对图像矩阵进行svd了. 吴军的<数学之美>里其实已经介绍过用svd进行大数据的压缩了,不过我这里还是针对图像进行介绍一下吧.比如一幅1000*1000的图像A,存储就需要1000000个像素了.我们对A进行svd分解,则A=USV’,如果rank(A)=r,那么U就为1000*r的矩阵,S…
最近接触点云比较多,如果把图像投影到点云应该挺有意思. 首先需要载入图像,然后做个球或其他什么形状的点云,这里可以参考球坐标公式. 最后通过pcshow将像素输出到点云上即可. 原图: 投影后的点云: 代码如下: clear all; close all; clc; img = imread('lena.jpg'); [m,n,d]=size(img); I=reshape(img,[],d); R=; x=zeros(m*n,); y=zeros(m*n,); z=zeros(m*n,); n…
比如有图像1,将其旋转n度得到图像2,问如何比较两张图像得到旋转的度数n. 算法思路参考logpolar变换: 1.从图像中心位置向四周引出射线. 2.计算每根射线所打到图像上的像素累计和,得到极坐标灰度曲线. 3.比较两张图的灰度曲线,得到最相关的偏移位置,即为两张图像的旋转角度. 原图: 旋转了10°的图像: 灰度曲线: 代码如下: main.m clear all; close all; clc; img1 = imread('lena.jpg'); img2 = imrotate(img…
matlab版本是2015b,其中更新了部分函数库之前网上相关程序不适用于新版本,在此提供适用于新版本的程序: 帧序列转换为视频 function video = frames2video(framepath , videoname) %framepath : 表示图像序列所在的路径,同时保证图像的大小相等 %videoname : 表示将要创建视频的名字 r_path = framepath; videoName = videoname; %初始化一个avi文件obj obj = VideoW…
静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:http://cn.mathworks.com/help/vision/examples/motion-based-multiple-object-tracking.html?s_tid=gn_loc_drop 程序来自matlab的CV工具箱Computer Vision System Toolbo…
本练习程序是受到了这个老外博文的启发,感觉挺有意思,就尝试了一下.他用的是opencv,我这里用的是matlab. 过去写过透视投影,当时是用来做倾斜校正的,这次同样用到了透视投影,不过更有意思,是将一张图像贴到另一张图像上. 两个透视投影都需要先计算投影矩阵,倾斜校正那一篇是通过解线性方程组求的变换矩阵,而这一篇是通过奇异值分解求的变换矩阵. 为了对齐两张图像,还需要对投影后的图像做一次仿射变换,其实就是坐标平移. 这里做投影和仿射直接调用了matlab的系统函数,方便一些. 还是先介绍下如何…
变换使用的模板必须是单连通的,而且模板中心必须在模板内,如果在模板中打个结或是月牙形,这里的程序就处理不了了. 虽然非单连通模板也有办法处理,不过不是这里要讨论的. 这里用到的方法和矩形变换为圆那片文章中用的方法几乎一样,变换前后像素按比例缩减,不过在判断弧度和图像边界到模板中心距离时略有不同. 变换为圆时弧度可以直接计算出来,而变换为任意形状只能算出一个最小相似值. 至于图像边界到模板中心距离只能分八种情况判断了,处理圆时可以根据对称性简化程序,这里似乎没有什么好办法简化. 变换细节上,那篇文…
这里我用的空间是x向右为正,y向下为正,z向屏幕里面为正.相当于标准右手系绕x轴旋转了180度. 将三个点光源放在 r = [0.3,0,0.5];g = [0.3,-0.5*cos(pi/6),-0.5*sin(pi/6)];b = [0.3,0.5*cos(pi/6),-0.5*sin(pi/6)]; 这三个位置上,向四周发射光线,取光线到y-z平面的模的倒数作为光的强度. 图像如下: 程序如下:   clear all; close all; clc; r = [0.3,0,0.5]; g…
能够使用这样一条线遍历图像中所有的像素,不过这里没有这样做,而只是生成了这样一条曲线. 程序中h,w是最终图像的高和宽,n为希尔伯特曲线阶数. 这里如果n等于log2(h)或log2(w),则图像就全为白了,也算是正好遍历所有像素了. 当然,n很大的话,图像也是全为白的,不过,那样不算正好遍历吧. 代码中生成曲线的核心函数可以在这里找到. 生成图像如下: matlab代码如下: main.m clear all;close all;clc; h=; w=; n=; imgn=zeros(h,w)…
1. 边缘提取算法 方法一:一阶微分算子 Sobel算子 Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,Sobel算子对边缘定位不是很准确,图像的边缘不止一个像素. Roberts算子 Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是利用roberts算子提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确. Prewitt算子 Prewitt算子检测方法对灰度渐变和噪声较多的图像处理效果较好.但边缘较宽,而且间断点多. Canny算子 Canny算子是目前边…
我只是感觉好玩,写了这样一段程序. 原理就是先随机生成两个点,然后根据这两个点画直线,最后在直线上的像素保留,没在直线上的像素丢弃就行了. 最后生成了一幅含有很多空洞的图像. 当然,对含有空洞的图像是可以用修复算法修复的. 我也尝试修复了一下,用的算法我过去也写过,可以看这里. 这一次就不贴修复代码了,那段程序中的输入图像img.mask和这里的输出图像img.mask是一模一样的. 原图: 采样后: 修复后: matlab代码如下: main.m: clear all; close all;c…
还记得过去写过径向模糊,不过当时效果似乎不好. 这次效果还可以,程序中用的算法是: 1.求当前处理点和图像中心点之间的距离r与角度ang; 2.通过对r的修改得到径向模糊. 3.通过对ang的修改得到旋转模糊. 一看代码就能全部明白,不仔细解释了. 原图如下: 处理后效果: matlab代码如下: clear all;close all;clc img=imread('lena.jpg'); [h w]=size(img); imshow(img) imgn=zeros(h,w); :h :w…
圆柱投影就是将一张二维的图像投影到三维的圆柱体上,不过在显示图像的时候依然是以二维的形式给出. 投影最重要的步骤就是计算投影变换公式,和图像旋转类似,只要得到变换公式,再依照公式进行代码编写就很容易了. 这里就不写投影变换公式的推导过程了,直接给出变换公式.公式分为正变换和反变换,编程时,反变换公式通常更有用. 正变换公式如下: 其中,x,y为原图的坐标,x',y'为变换后图像的坐标,W,H为原图的宽和高,f=W/(2*tan(hfOV/2)),这里hfOV为相机水平视角,我们通过设置这个参数来…
这个程序我最初是用FreeImage写的,这两天改成了matlab,再不贴上来,我就要忘了. 看到一篇文章有这样的变换,挺有意思的,就拿来试了一下,文章点此. 全景图到穹顶图变换,通俗的说就是将全景图首尾相接做成一个圆环的样子. 先看下面这张图: 下面的矩形就是我们要处理的全景图,上面的矩形是变换后的图像.下面图像的底边对应穹顶图的内圆,顶边对应穹顶图的外圆,当然,反过来也是可以的. 程序流程: 1.定义穹顶图内圆和外圆的半径,变换后的像素就填充在这个内外半径的圆环中. 2.遍历穹顶图,当所处理…
图的相关算法也算是自己的一个软肋了,当年没选修图论也是一大遗憾. 图像处理中,也有使用图论算法作为基础的相关算法,比如图割,这个算法就需要求最大流.最小割.所以熟悉一下图论算法对于图像处理还是很有帮助的. Dijkstra和Bellman-Ford类似,都是解决单源最短路径问题,不同的是这个方法只能解决边为非负的问题,实现的好的Dijkstra算法运行时间要快于Bellman-ford. 算法步骤如下: 1.首先设置队列,所有节点入列,源节点值为0,其他节点值为无穷. 2.然后在队列中找值最小的…
http://www.cnblogs.com/tiandsp/archive/2013/04/18/3029468.html 主要是用来平滑图像的,克服了高斯模糊的缺陷,各向异性扩散在平滑图像时是保留图像边缘的(和双边滤波很像). 通常我们有将图像看作矩阵的,看作图的,看作随机过程的,记得过去还有看作力场的. 这次新鲜,将图像看作热量场了.每个像素看作热流,根据当前像素和周围像素的关系,来确定是否要向周围扩散.比如某个邻域像素和当前像素差别较大,则代表这个邻域像素很可能是个边界,那么当前像素就不…
这个算法是对photoshop中滤镜->像素化->碎片这个功能的学习. PS这个功能好像不带参数,不过我这里有滤波半径r可以进行控制. 因为我是看效果猜算法的,效果肯定有所区别. 我的想法是对图像以r为长度,在上下左右四个方向做位移,然后进行混合. 代码还是很简单,就不详细介绍了. 处理效果如下: 原图: 处理后效果: PS碎片效果: matlab代码如下: clear all;close all;clc img=double(imread('lena.jpg')); [h w]=size(i…
我手机上有一个软件实现了很多图像滤镜,挺有意思,我打算都尝试一下. 这个滤镜主要是实现老照片效果. 代码很短,我就不详细介绍了. 原图: 处理后效果: matlab代码如下: clear all;close all;clc; img=imread('lena_rgb.jpg'); [h w k]=size(img); imshow(img); R=double(img(:,:,)); G=double(img(:,:,)); B=double(img(:,:,)); rR=R*0.393+G*0…
这个算子算是图像历史上第一个特征点提取算法了,1977年提出的,很简单,拿来练手很合适. 算法原理如下: 1.选取一个合理的邻域遍历图像,这里是5*5邻域的.在邻域中依次计算,垂直,水平,对角与反对角四个相邻像素灰度的差的平方和,作为该邻域特征值. 大致就是下面这个样子: 公式: 这里k是窗口的半径. 2.从四个特征值中选最小的值作为该像素初次候选特征值. 公式: 3.设定一个阈值,将大于该阈值初次候选特征值的选为二次候选特征值. 4.设定一个邻域,将该邻域最大的二次候选特征值作为最终要选择的特…
最近看了一些用matlab对图形图片进行保存的帖子和资源,关于图像保存的方法给大家分享一下这些方法是大家所使用方法的一个总结. 如今常用的方法有三种printf,imwrite,saveas下面分别介绍一下:imwriteimwrite将图像数据写成图像文件,一般用于图像处理,当我们使用imshow将一副图像使显示在坐标系上时,我们可以使用如下方式保存图像    I=getimage(gcf); % 获取坐标系中的图像文件数据   imwrite(I,'myphoto.jpg')%保存图像为文件…
最近总是对计算几何方面的程序比较感兴趣. 多圆求交点,要先对圆两两求交点. 有交点的圆分为相切圆和相交圆. 相切圆求法: 1.根据两圆心求直线 2.求公共弦直线方程 3.求两直线交点即两圆切点. 相交圆求法: 1.求公共弦方程直线. 2.公共弦直线方程和其中一个圆方程联立求解即可. 公共弦直线方程就是两圆方程的差. 结果如下: matlab代码如下: main.m: clear all;close all;clc; n=; cic=rand(n,); %(x,y,r) hold on; :n-…