05 2013 档案
摘要:曾经想要实现过Bertalmio图像修复算法,无奈自身实力不够,耗费两天时间也没能实现。昨天博客上有人问到TV模型,这个模型我过去是没听说过的,于是就找来相关论文研究了一下,发现TV模型也可以用来修复图像,于是就有了想实现的想法。用到的偏微分方程技巧和各项异性扩散很像。先看看效果吧:原lena:随手截的噪声图:合成的需要修复的图:修复后的图(没有处理边界):对于从来没有接触过图像修复的我来说,效果真是惊艳了。下面介绍运算步骤:和各项异性扩散类似,整个算法也是基于迭代的,迭代公式如下:其中Io代表当前处理的像素,Ip代表邻域像素,p就可以取news四邻域。H定义如下:这里的lambda为自定义的
阅读全文
摘要:HOG(Histogram of Oriented Gradient)方向梯度直方图,主要用来提取图像特征,最常用的是结合svm进行行人检测。算法流程图如下(这篇论文上的):下面我再结合自己的程序,表述一遍吧:1.对原图像gamma校正,img=sqrt(img);2.求图像竖直边缘,水平边缘,边缘强度,边缘斜率。3.将图像每16*16(取其他也可以)个像素分到一个cell中。对于256*256的lena来说,就分成了16*16个cell了。4.对于每个cell求其梯度方向直方图。通常取9(取其他也可以)个方向(特征),也就是每360/9=40度分到一个方向,方向大小按像素边缘强度加权。最后归
阅读全文
摘要:radon变换就是图像在不同方向上的投影。下图f(x,y)可以代表图像,R(x')就是图像向右下方的投影。数学上是按投影方向进行线积分,在图像领域就是按照投影方向累加像素就行了。matlab中有radon函数,为了熟悉原理我又写了一个。通过旋转图像映射,效率不怎么样。canny后Lena:45度投影:代码如下:main.mclear all; close all; clc;img=imread('lena.jpg');ed=edge(img,'canny');r=Radon(ed,45); %检测直线什么的,可以投影到0-179度上%r=radon(ed
阅读全文
摘要:Renyi熵是对通常的香农熵的扩展,算是q阶广义熵。公式如下:其中P和香农熵公式中的P一样,是概率。当q=1时公式退化为香农熵公式。(如何证明?看wiki吧)有用此公式寻找图像最佳二值化阈值的。首先定义前景区域A,背景区域B。那么前景与背景区域像素相应的Renyi熵就如下定义:其中k是当前取的灰度级,P(A)是像素在A区域的概率,P(B)类似。当然,这里说区域,不是指空间区域,是像素灰度级区域。最后图像Renyi熵求最佳阈值定义如下:这里得到的K就是分割阈值。分割效果如下:原图:分割后:在编程时还需要确定阶数q,我取的是2。matlab代码如下:clear all;close all;clc;
阅读全文
摘要:普通的直方图就是统计图像中像素灰度出现的次数。二维直方图的其中一维就是普通的直方图,即统计图像中像素灰度出现的次数。另一维的概念就比较模糊了,我看很多论文中都是用的当前像素邻域均值灰度出现的次数。按照这个意思,其实用当前像素邻域中值灰度出现的次数也是可以的。或者用什么厉害的算法处理一下,在统计出现灰度的次数也是可以的。所以按照这样推广,其实构成N维直方图也是未尝不可的。至于有什么用处嘛,我还需要再研究研究。lena的二维直方图,1维是普通直方图,2维是半径为1的邻域均值直方图:matlab代码如下:clear all;close all;clc;img=imread('lena.jpg
阅读全文
摘要:中值滤波是很经典的算法了。今天看论文又知道还有一种叫自适应中值滤波的算法RAMF。原论文在这里。RAMF主要通过以下两步来处理图像。1.首先确定最大的滤波半径,然后用一个合适的半径r对图像进行滤波。计算当前滤波半径像素灰度的Imin,Imax,Imed,然后判断Imed是否在[Imin,Imax]中间,如果在则向下进行,否则扩大当前半径r继续滤波直到r等于最大滤波半径。2.如果当前处理的像素img(i,j)在[Imin,Imax]之间,则输出当前像素,否则输出当前滤波半径中值像素Imed。看下效果吧:噪声图像:RAMF算法:普通3*3中值滤波:matlab代码如下:clear all;clos
阅读全文
摘要:关于纹理合成最经典的论文应该就数Efros的Texture Synthesis by Non-parametric Sampling这篇论文了,引用量近2000。这里的合成是基于样例的,就是先有一个小的纹理图像,然后合成一个大的。我个人的理解是,先产生一个大的随机图像,然后对随机图像中每个像素及其邻域像素和小的纹理图像做对比,找出随机图像当前邻域和小的纹理图像最接近的邻域,然后将小的纹理图像最接近的像素赋值给大的随机图像。这样每处理一个随机图像中的像素,就需要遍历小的纹理图像的所有像素,所以运行时间是很慢的。先看下效果:小的纹理图像:合成的纹理图像:matlab代码如下:clear all;c
阅读全文