上一页 1 ··· 47 48 49 50 51 52 53 54 55 ··· 79 下一页
摘要: 关于纹理合成最经典的论文应该就数Efros的Texture Synthesis by Non-parametric Sampling这篇论文了,引用量近2000。这里的合成是基于样例的,就是先有一个小的纹理图像,然后合成一个大的。我个人的理解是,先产生一个大的随机图像,然后对随机图像中每个像素及其邻域像素和小的纹理图像做对比,找出随机图像当前邻域和小的纹理图像最接近的邻域,然后将小的纹理图像最接近的像素赋值给大的随机图像。这样每处理一个随机图像中的像素,就需要遍历小的纹理图像的所有像素,所以运行时间是很慢的。先看下效果:小的纹理图像:合成的纹理图像:matlab代码如下:clear all;c 阅读全文
posted @ 2013-05-06 21:00 Dsp Tian 阅读(6489) 评论(7) 推荐(0)
摘要: 所谓的最终腐蚀并不是把图像不断腐蚀直到一片黑为止,那样还有什么意思呢。最终腐蚀的意思是连续腐蚀过程中连通子区域消失前所有剩余部分的并。看下图有一个连通区域:那么最终腐蚀就是把图像不断腐蚀到只剩圆环最中间的白色区域为止。如下:所以一般最终腐蚀之后,如果再腐蚀一下,那么图像就全没了。最终腐蚀的通常算法会先对原图像使用距离变换,然后求区域极大值。不过这种方法怎么说呢,速度倒是快,不过我实验了很多次,求得的结果很不稳定。所以我就自己开发了一个算法,虽然有些慢,不过很稳定。1.首先对原图像进行连通区域标记。2.对标记后图像不断进行腐蚀,每腐蚀一次,重新标记连通区域。3.每腐蚀并且标记一次之后,检查腐蚀后 阅读全文
posted @ 2013-04-28 15:47 Dsp Tian 阅读(7586) 评论(4) 推荐(1)
摘要: 顾名思义,条件膨胀是带有限定条件的膨胀。限定条件通常有两个。1.膨胀始终在原始集合内。如下图:原始集合图像:集合内部的子集图像:如果对后一个图进行规则1的条件膨胀,那么最后的结果就会得到第一幅图。所以这里第一幅图即是原始集合图像又是最终条件膨胀图像。2.膨胀之后各自粒子互不连接。如下图:原图:按规则2条件膨胀需首先标记连通区域:然后再进行互补侵犯的膨胀:根据具体应用环境,可以使用单一的条件或两个条件同时使用。分水岭分割的最后筑坝那一步就是两个条件同时使用到了。单独规则1的matlab代码:clear all;close all;clc;mask=imread('p1.jpg') 阅读全文
posted @ 2013-04-28 12:07 Dsp Tian 阅读(6491) 评论(8) 推荐(0)
摘要: 目标内边界的像素全都在目标里面,目标外边界的像素全都不在目标上,是包围着目标的。二值图像内外边界的计算都是有两种方法的,所以一共是4种算法,不过实际用到跟踪的只有一个而已。首先是内边界跟踪:第一种方法不是跟踪方法。步骤是先对原图像腐蚀,然后用原图像减去腐蚀后的图像就得到边界了。第二种方法是跟踪方法。步骤如下:1.遍历图像。2.标记第一个遇见像素块的前景像素(i,j)。3.对这个像素周围八邻域逆时针搜索,如果搜索到周围有前景像素,那么更新坐标(i,j)为(i',j'),并标记。4.不断执行第3步直到再次遇见此像素块第一次标记的像素。5.继续执行第1步。然后是外边界跟踪:第一种方法 阅读全文
posted @ 2013-04-26 20:10 Dsp Tian 阅读(28850) 评论(3) 推荐(1)
摘要: 聚类算法,不是分类算法。分类算法是给一个数据,然后判断这个数据属于已分好的类中的具体哪一类。聚类算法是给一大堆原始数据,然后通过算法将其中具有相似特征的数据聚为一类。这里的k-means聚类,是事先给出原始数据所含的类数,然后将含有相似特征的数据聚为一个类中。所有资料中还是Andrew Ng介绍的明白。首先给出原始数据{x1,x2,...,xn},这些数据没有被标记的。初始化k个随机数据u1,u2,...,uk。这些xn和uk都是向量。根据下面两个公式迭代就能求出最终所有的u,这些u就是最终所有类的中心位置。公式一:意思就是求出所有数据和初始化的随机数据的距离,然后找出距离每个初始数据最近的数 阅读全文
posted @ 2013-04-24 20:15 Dsp Tian 阅读(167814) 评论(46) 推荐(15)
摘要: 将彩色图像RGB三色分离出来是一个很有意义的操作。用到void split(const Mat& mtx,vector<Mat>& mv),void merge(const vector<Mat>& mv,Mat& dst)这两个函数。#include "cv.h"#include "highgui.h"#include <iostream>#include <vector>using namespace std;using namespace cv;int main(int 阅读全文
posted @ 2013-04-23 23:11 Dsp Tian 阅读(10575) 评论(1) 推荐(0)
摘要: 图像区域分裂可以将图像中相似的区域归为一个子区域,否则这个区域分裂。分裂的步骤还是很好理解的。对一个图像而言,首先确定一个分裂准则,如果当前图像区域中有像素没有满足这个准则,那么本区域继续分裂,否则分裂停止。我这里用的准则就是当前像素灰度是否和本区域平均灰度差距过大,如果相差很大则继续分裂,否则分裂停止并将本区域赋值为本区域平均值。分裂具体步骤:1.输入图像作为初始区域。2.判断本区域是否有像素灰度与本区域平均灰度差距过大。若有,则本区域分解为四部分,对每部分继续执行步骤2;若无,结束。(显然的递归嘛,当然,递归和迭代一般是能互换的)先看看分裂效果:matlab代码如下:main.mclear 阅读全文
posted @ 2013-04-23 20:36 Dsp Tian 阅读(6449) 评论(0) 推荐(0)
摘要: 三种常见的边缘检测算子。#include "cv.h"#include "highgui.h"using namespace cv;int main(int argc, char* argv[]){ Mat src = imread("misaka.jpg"); Mat dst; //输入图像 //输出图像 //输入图像颜色通道数 //x方向阶数 //y方向阶数 Sobel(src,dst,src.depth(),1,1); imwrite("sobel.jpg... 阅读全文
posted @ 2013-04-20 17:29 Dsp Tian 阅读(34837) 评论(2) 推荐(2)
摘要: 图像的基本形态学操作。#include "cv.h"#include "highgui.h"using namespace cv;int main(int argc, char* argv[]){ Mat src = imread("misaka.jpg"); Mat dst; //输入图像 //输出图像 //单元大小,这里是5*5的8位单元 //腐蚀位置,为负值取核中心 //腐蚀次数两次 erode(src,dst,Mat(5,5,CV_8U),Point(-1,-... 阅读全文
posted @ 2013-04-20 16:29 Dsp Tian 阅读(26823) 评论(0) 推荐(0)
摘要: 四种经典滤波算法,在opencv文档中都能找到的,熟悉一下调用规范。#include "cv.h"#include "highgui.h"#include <iostream>using namespace std;using namespace cv;int main(int argc, char* argv[]){ Mat src = imread("misaka.jpg"); Mat dst; //参数是按顺序写的 //高斯滤波 //src:输入图像 //dst:输出图像 //Size(5,... 阅读全文
posted @ 2013-04-20 00:46 Dsp Tian 阅读(62964) 评论(4) 推荐(1)
上一页 1 ··· 47 48 49 50 51 52 53 54 55 ··· 79 下一页