28 Jan 2010

Matlab 图像处理相关函数命令



一、通用函数:

colorbar  显示彩色条

语法:colorbar \ colorbar('vert') \
colorbar('horiz') \ colorbar(h) \ h=colorbar(...) \
colorbar(...,'peer',axes_handle)

getimage 从坐标轴取得图像数据

语法:A=getimage(h) \ [x,y,A]=getimage(h) \
[...,A,flag]=getimage(h) \ [...]=getimage




imshow 显示图像

语法:imshow(I,n) \ imshow(I,[low high]) \
imshow(BW) \ imshow(X,map) \ imshow(RGB)\
imshow(...,display_option) \ imshow(x,y,A,...) \ imshow filename \
h=imshow(...)

montage 在矩形框中同时显示多幅图像

语法:montage(I) \ montage(BW) \ montage(X,map)
\ montage(RGB) \ h=montage(...)

immovie 创建多帧索引图的电影动画

语法:mov=immovie(X,map) \
mov=immovie(RGB)

subimage 在一副图中显示多个图像

语法:subimage(X,map) \ subimage(I) \
subimage(BW) \  subimage(RGB) \ subimage(x,y,...)
\ subimage(...)


truesize 调整图像显示尺寸

语法:truesize(fig,[mrows mcols]) \
truesize(fig)

warp 将图像显示到纹理映射表面

语法:warp(X,map) \ warp(I ,n) \ warp(z,...)
warp(x,y,z,...) \  h=warp(...)

zoom 缩放图像

语法:zoom on \ zoom off \ zoom out \ zoom reset
\ zoom \ zoom xon \ zoom yon\ zoom(factor) \
zoom(fig,option)

 

二、图像文件I/O函数命令


imfinfo 
返回图形图像文件信息

语法:info=imfinfo(filename,fmt) \
info=imfinfo(filename)

imread 
从图像文件中读取(载入)图像

语法:A=imread(filename,fmt) \
[X,map]=imread(filename,fmt) \ [...]=imread(filename) \
[...]=imread(URL,...) \ [...]=imread(...,idx) (CUR,ICO,and TIFF
only) \ [...]=imread(...,'frames',idx) (GIF only) \
[...]=imread(...,ref) (HDF only) \
[...]=imread(...,'BackgroundColor',BG) (PNG only) \ [A,map,alpha]
=imread(...) (ICO,CUR,PNG only)

imwrite 
把图像写入(保存)图像文件中

语法:imwrite(A,filename,fmt) \
imwrite(X,map,filename,fmt) \ imwrite(...,filename) \
imwite(...,Param1,Val1,Param2,Val2...)


imcrop  剪切图像

语法:I2=imcrop(I) \ X2=imcrop(X,map) \
RGB2=imcrop(RGB) \ I2=imcrop(I,rect) \ X2=imcrop(RGB,rect) \
[...]=imcrop(x,y,...) \ [A,rect]=imcrop(...) \
[x,y,A,rect]=imcrop(...)

imresize  改变图像大小

语法:B=imresize(A,m,method)

imrotate  旋转图像

语法:B=imrotate(A,angle,method) \
B=imrotate(A,angle,method,'crop')


 

三、像素和统计处理函数

corr2 
计算两个矩形的二维相关系数

语法:r=corr2(A,B)

imcontour 创建图像数据的轮廓图

语法:imcontour(I,n) \ imcontour(I,v) \
imcontour(x,y,...) \ imcontour(...,LineSpec) \ [C,h]
=imcontour(...)

imfeature 
计算图像区域的特征尺寸


语法:stats=imfeature(L,measurements) \
stats=imfeature(L,measurements,n)

imbist 
显示图像数据的柱状图

impixel 确定像素颜色值

语法:P=impixel(I) \ P=impixel(X,map) \
P=impixel(RGB) \ P=impixel(I,c,r) \ P=impixel(X,map,c,r) \
P=impixel(RGB,c,r) \ [c,r,P]=impixel(...) \ P=impixel(x,y,I,xi,yi)
\ P=impixel(x,y,RGB,xi,yi) \ P=impixel(x,y,X,map,xi,yi)
\

[xi,yi,P]=impixel(x,y,...)

improfile 沿线段计算剖面图的像素值

语法:c=improfile \ c=improfile(n) \
c=improfile(I,xi,yi) \ c=improfile(I,xi,yi,n) \ 
[cx,cy,c]=improfile(...)  \
[cx,cy,c,xi,yi]=improfile(...) \ [...]=improfile(x,y,I,xi,yi)
[...]=improfile(x,y,I,xi,yi,n) \
[...]=improfile(...,method)


mean2 计算矩阵元素的平均值

语法:B=mean2(A)

pixval  显示图像像素信息

语法:pixval on

std2 计算矩阵元素的标准偏移

语法:b=std2(A)

 

四、图像分析函数:


edge 图像边缘检测

语法:BW=edge(I,'sobel') \
BW=edge(I,'sobel',thresh) \ BW=edge(I,'sobel',thresh,direction) \
[BW,thresh]=edge(I,'sobel',...) \ BW=edge(I,'prewitt') \
BW=edge(I,'prewitt',thresh) \ BW=edge(I,'prewitt',thresh,direction)
\

[BW,thresh]=edge(I,'prewitt',...)
BW=edge(I,'roberts') \
BW=edge(I,'roberts',thresh) \ [BW,thresh]=edge(I,'roberts',...) \ BW=edge(I,'log') \
BW=edge(I,'log',thresh) \ BW=edge(I,'log',thresh,sigma) \
[BW,threshold]=edge(I,'log',...) \ BW=edge(I,'zerocross',thresh,h)
\ [BW,thresh]=edge(I,'zerocross',...) \

BW=edge(I,'canny') \
BW=edge(I,'canny',thresh) \ BW=edge(I,'canny',thresh,sigma) \
[BW,threshold]=edge(I,'canny',...)

qtgetblk 
获取四叉树分解的块值

语法:[vals,r,c]=qtgetblk(I,S,dim) \
[vals,idx]=qtgetblk(I,S,dim)


qtsetblk 设置四叉树分解中的块值

语法:J=qtsetblk(I,S,dim,vals)

 

五、图像增强函数

histeq 用柱状图均等化增强对比

语法:J=histeq(I,hgram) \ J=histeq(I,n) \
[J,T]=histeq(I,...) \ newmap=histeq(X,map,hgram) \
newmap=histeq(X,map)

imadjust 调整图像灰度值或颜色映像表

语法:J=imadjust(I,[low_in ,high_in]),[low_out
,high_out],gamma) \ newmap=imadjust(map,[low_in ,high_in]),[low_out
,high_out],gamma) \ RGB2=imadjust(RGB1,...)

imnoise 增强图像的渲染效果


语法:J=imnoise(I,type) \
J=imnoise(I,type,parameters)

medfilt2 进行二维中值过滤

语法:B=medfilt2(A,[m n]) \ B=medfilt2(A) \
B=medfilt2(A,'indexed',...)

ordfilt2 进行二维统计顺序过滤

语法:B=ordfilt2(A,order,domain) \
B=ordfilt2(A,order,domain,S) \ B=ordfilt2(...,padopt)

wiener2 进行二维适应性去噪过滤处理

语法:J=wiener2(I,[m  n],noise)
\ [J,noise]=wiener2(I,[m n])

 


六、线性滤波函数

conv2 进行二维卷积操作

语法:C=conv2(A,B) \ C=conv2(hcol,hrow,A) \
C=conv2(...,'shape')

convmtx2 计算二维卷积矩阵

语法:T=convmtx2(H,m,n) \ T=convmtx2(H,[m
n])

convn 计算n维卷积

语法:C=convn(A,B) \
C=convn(A,B,'shape')

filter2 进行二维线性过滤操作

语法:Y=filter2(h,X) \
Y=filter2(h,X,shape)


fspecial 创建预定义过滤器

语法:h=fspecial(type) \
h=fspecial(type,parameters)

 

七、线性二维滤波设计函数

freqspace 确定二维频率响应的频率空间

语法:[f1,f2]=freqspace(n) \
[f1,f2]=freqspace([m n]) \ [x1 ,y1]=freqspace(...,'meshgrid') \
f=freqspace(N) \ f=freqspace(N,'whole')

freqz2 计算二维频率响应

语法:[H,f1,f2]=freqz2(h,n1,n2) \
[H,fi,f2]]=freqz2(h,[n2,n1]) \ [H,fi,f2]]=freqz2(h,f1,f2]) \
[H,fi,f2]]=freqz2(h) \
[...]=freqz2(h,...,[dx dy]) \ [...]=freqz2(h,...,dx) \
freqz2(...)


fsamp2 用频率采样法设计二维FIR过滤器

语法:h=fsamp2(Hd) \ h=fsamp2(f1,f2,Hd,[m
n])

ftrans2 通过频率转换设计二维FIR过滤器

语法:h=ftrans2(b,t) \ h=ftrans2(b)

fwind1 用一维窗口方法设计二维FIR过滤器

语法:h=fwind1(Hd,win) \ h=fwind1(Hd,win1,win2)
\ h=fwind1(f1,f2,Hd,...)

fwind2 用二维窗口方法设计二维FIR过滤器

语法:h=fwind2(Hd,win) \
h=fwind2(f1,f2,Hd,win)

 


八、图像变换函数

dct2 进行二维离散余弦变换(反余弦变换用idct2)

语法:B=dct2(A) \ B=dct2(A,m.n) \ B=dct2(A,[m
n])

dctmtx 计算离散余弦傅立叶变换

语法:D=dctmtx(n)

fft2 进行二维快速傅立叶变换(反变换用ifft2)

语法:Y=fft2(X) \ Y=fft2(X,m,n)

fftn 进行n维快速傅立叶变换(反变换用ifftn)

语法:Y=ffn(X) \ Y=fftn(X,siz)


fftshift 快速傅立叶变换的DC组件移到光谱中心

语法:Y=fftshift(X) \
Y=fftshift(X,dim)

iradon 进行反radon变换

语法:I=iradon(P,theta) \
I=iradon(P,theta,interp,filter,d,n) \ [I,h]=iradon(...)

phantom 产生一个头部幻影图像

语法:P=phantom(def,n) \ P=phantom(E,n) \
[P,E]=phantom(...)

radon 计算radon变换

语法:R=radon(I,theta) \
[R,xp]=radon(...)

 


九、边沿和块处理函数

bestblk 确定进行块操作的块大小

语法:siz=bestblk([m n],k) \ [mb,nb]=bestblk([m
n],k)

blkproc 实现图像的显示块操作

语法:B=blkproc(A,[m n]),fun) \ B=blkproc(A,[m
n],fun,P1,P2,...) \ B=blkproc(A,[m n],[mborder
nborder],fun,...)

col2im 将矩阵的列重新组织到块中

语法:A=col2im(B,[m n],[mm nn],block_type) \
A=col2im(B,[m n],[mm nn])

colfilt 利用列相关函数进行边沿操作

语法:B=colfilt(A,[m n],block_type,fun) \
B=colfilt(A,[m n],block_type,fun,P1,P2,...) \ B=colfilt(A,[m
n],[mblock nblock],...) \ B=colfilt(A,'indexed',...)


im2col 重调图像块为列

语法:B=im2col(A,[m n],block_type) \
B=im2col(A,[m n]) \ B=im2col(A,'indexed',...)

nlfilter 进行边沿操作

语法:B=nlfilter(A,[m n],fun) \ B=nlfilter(A,[m
n],fun,P1,P2,...) \ B=nlfilter(A,'indexed',...)

 

十、二进制图像操作函数

applylut 在二进制图像中利用lookup表进行行边沿操作

语法:A=applylut(BW,LUT)

bwarea 计算二进制图像对象的面积


语法:total=bwarea(BW)

bweuler 计算二进制图像的欧拉数

语法:eul=bweuler(BW)

bwfill 填充二进制图像的背景色

语法:BW2=bwfill(BW1,c,r,n) \ BW2=bwfill(BW1,n)
\ [BW2,idx]=bwfill(...) \ BW2=bwfill(x,y,BW1,xi,yi,n) \
[x,y,BW2,idx,xi,yi]=bwfill(...) \ 
[BW2,idx]=bwfill(BW1,'holes',n)

bwlabel 标注二进制图像中已连接的部分

语法:L=bwlabel(BW,n) \
[L,num]=bwlabel(BW,n)

bwmorph 提取二进制图像的轮廓


语法:BW2=bwmorph(BW1,operation) \
BW2=bwmorph(BW1,operation,n)

bwperim 计算二进制图像中对象的周长

语法:BW2=bwperim(BW1) \
BW2=bwperim(BW1,CONN)

bwselect 在二进制图像中选择对象

语法:BW2=bwselect(BW1,c,r,n) \
BW2=bwselect(BW1,n) \ [BW2,idx]=bwselect(...) \
BW2=bwselect(x,y,BW1,xi,yi,n) \
[x,y,BW2,idx,xi,yi]=bwselect(...)

dilate 放大二进制图像

语法:BW2=dilate(BW1,SE) \
BW2=dilate(BW1,SE,alg) \ BW2=dilate(BW1,SE,...,n)

erode 弱化二进制图像的边界

语法:BW2=erode(BW1,SE) \ BW2=erode(BW1,SE,alg) \ BW2=erode(BW1,SE,...,n)


makelut 创建一个用于applylut函数的lookup表

语法:lut=makelut(fun,n) \
lut=makelut(fun,n,P1,P2,...)

 

十一、区域处理函数

roicolor 选择感兴趣的颜色区

语法:BW=roicolor(A,low,high) \
BW=rocicolor(A,v)

roifill 在图像的任意区域中进行平滑插补

语法:J=roifill(I,c,r) \ J=roifill(I) \
J=roifill(I,BW) \ [J,BW]=roifill(...) \ J=roifill(x,y,I,xi,yi) \
[x,y,J,BW,xi,yi]=roifill(...)

roifilt2 过滤敏感区域


语法:J=roifilt2(h,I,BW) \ J=roifilt2(I,BW,fun)
\ J=roifilt2(I,BW,fun,P1,P2,...)

roipoly 选择一个敏感的多边形区域

语法:BW=roipoly(I,c,r) \ BW=roipoly(I) \
BW=roipoly(x,y,I,xi,yi) \ [BW,xi,yi]=roipoly(...) \
[x,y,BW,xi,yi]=roipoly(...)

 

十二、颜色映像处理函数

brighten 增加或降低颜色映像表的亮度

语法:brighten(beta) \ brighten(h,beta) \
newmap=brighten(beta) \ newmap=brighten(cmap,beta)

cmpermute 调整颜色映像表中的颜色

语法:[Y,newmap]=cmpermute(X,map) \
[Y,newmap]=cmpermute(X,map,index)


cmunigue 查找颜色映像表中特定的颜色及相应的图像

语法:[Y,newmap]=cmunigue(X,map) \
[Y,newmap]=cmunigue(RGB) \ [Y,newmap]=cmunique(I)

imapprox 对索引图像进行近似处理

语法:[Y,newmap]=imapprox(X,map,n)
[Y,newmap]=imapprox(X,map,tol) \
Y=imapprox(X,map,newmap) \
[...]=imapprox(...,dither_option)

rgbplot 划分颜色映像表

语法:rgbplot(cmap)

 


十三、颜色空间转换函数

hsv2rgb
转换HSV值为RGB颜色空间:M=hsv2rgb(H)

ntsc2rgb
转换NTSC值为RGB颜色空间:rgbmap=ntsc2rgb(yiqmap) \
RGB=ntsc2rgb(YIQ)

rgb2hsv
转换RGB值为HSV颜色空间:cmap=rgb2hsv(M)

rgb2ntsc
转换RGB值为NTSC颜色空间:yiqmap=rgb2ntsc(rgbmap) \
YIQ=rgb2ntsc(RGB)

rgb2ycbcr
转换RGB值为YCbCr颜色空间:ycbcrmap=rgb2ycbcr(rgbmap) \
YCBCR=rgb2ycbcr(RGB)

ycbcr2rgb
转化YCbCr值为RGB颜色空间:rgbmap=ycbcr2rgb(ycbcrmap) \
RGB=ycbcr2rgb(YCBCR)

 

十四、图像类型和类型转换函数


dither 通过抖动增加外观颜色分辨率转换图像

语法:X=dither(RGB,map) \
BW=dither(I)

gray2ind 转换灰度图像为索引图像

语法:[X,map]=gray2ind(I,n) \
[X,map]=gray2ind(BW,n)

grayslice 从灰度图像为索引图像

语法:X=grayslice(I,n) \
X=grayslice(I,v)

im2bw 转换图像为二进制图像

语法:BW=im2bw(I,level) \ BW=im2bw(X,map,level)
\ BW=im2bw(RGB,level)

im2double 转换图像矩阵为双精度型


语法:I2=im2double(I1) \ RGB2=im2double(RGB1) \
I=im2double(BW) \ X2=im2double(X1,'indexed')

double 转换数据为双精度型

语法:double(X)

unit8 、unit16转换数据为8位、16位无符号整型: i=unit8(x) \
i=unit16(x)

im2unit8 转换图像阵列为8位无符号整型

语法:I2=im2unit8(I1) \ RGB2=im2unit8(RGB1) \
I=im2unit8(BW) \ X2=im2unit8(X1,'indexed')

im2unit16 转换图像阵列为16位无符号整型

语法:I2=im2unit16(I1) \ RGB2=im2unit16(RGB1) \
I=im2unit16(BW) \ X2=im2unit16(X1,'indexed')


ind2gray 把检索图像转化为灰度图像

语法:I=ind2gray(X,map)

ind2rgb 
转化索引图像为RGB真彩图像

语法:RGB=ind2rgb(X,map)

isbw 判断是否为二进制图像

语法:flag=isbw(A)

isgray 判断是否为灰度图像

语法:flag=isgray(A)


isind 判断是否为索引图像

语法:flag=isind(A)

isrgb 判断是否为RGB真彩色图像

语法:flag=isrgb(A)

mat2gray 转换矩阵为灰度图像

语法:I=mat2gray(A,[amin amax]) \
I=mat2gray(A)

rgb2gray 转换RGB图像或颜色映像表为灰度图像

语法:I=rgb2gray(RGB) \
newmap=rgb2gray(map)

rgb2ind 转换RGB图像为索引图像


语法:[X,map]=rgb2ind(RGB,tol) \
[X,map]=rgb2ind(RGB,n) \ X=rgb2ind(RGB,map) \
[...]=rgb2ind(...,dither_option)

 

十五、新增图像处理工具箱函数

adapthisteq 限制对比度直方图均衡化: J=adapthisteq(I) \
J=adapthisteq(I,param1,val1,param2,val2...)

applycform 用于颜色空间变换
out=applyform(I,C)

bwboundaries 描绘二进制图像边界

语法: B=bwboundaries(BW) \
B=bwboundaries(BW,CONN) \ B=bwboundaries(BW,CONN,options)
[BW,CONN,options] \ [BL]=bwboundaries(...) \
[BLNA]=bwboundaries()

bwtraceboundary 描述二进制图像中的物体

B=bwtraceboundary(BW,P,fstep) \
B=bwtraceboundary(BW,P,fstep,CONN) \
B=bwtraceboundary(...N,dir)


decorrstrech 对多通道图像进行去相关处理

语法:S=decorrstretch(I) \
S=decorrstretch(I,TOL)

dicomdict 获取或读取DICOM文件

语法:dicomdict('set',dictionary) \
dictionary=dicomdict('get')

getline 用鼠标选择ployline

语法:[x,y]=getline(fig) \ [x,y]=getline(ax) \
[x,y]=getline \ [x,y]=getline(...,'closed')

getpts 用鼠标选择像素点

语法:[x,y]=getpts(fig) \ [x,y]=getpts(ax) \
[x,y]=getpts

getrect 用鼠标选择矩阵


语法:rect=getrect(fig) \ rect=getrect(ax) \
rect=getrect(fig)

iccread 读取ICC剖面

语法:P=iccread(filename)

im2java2d 将图像转换为Java缓冲图像

语法:jimage=im2java2d(I) \
jimage=im2java2d(X,MAP)

imview 在图像与蓝旗中显示图像

语法:imview(I) \  imview(RGB)
\ imview(X,map) \imview(I,range) \ imview(filename) \
imview(....'InitialMagnification',initial_mag) \
h=imview(...)  imview close
all


ippl 检查IPPL的存在

语法:TF=ippl \ [TF B]=ippl

iptdemos 显示图像处理工具箱中的索引图像

lab2double、lab2unit16、lab2unit8
将L*a*b数据分别转换为双精度、16位数据、8位数据

makecform 创造一个色彩转换结构

poly2mask 把多边形区域转换成mask区域

语法:BW=poly2mask(x,y,m,n)

unitlut 查找表中A像素值

语法:B=unitlut(A,LUT)


xyz2double、xyz2unit16
将颜色数据从XYZ转换到双精度、16进制。

语法:xyzd=xyz2double(XYZ) \
xyz16=xyz2unit16(xyz)


26 Jan 2010

Powerful Evil Google

unzip FERET database


FERET database is too large to transfer among the internet.
After obtainning permission via email, the full database can be downloaded as 5 tar packages plus one more for md5 check.
In Linux system, it's easy to use the tar file.
However, for Windows users, you have to install Cygwin environment first,
then
mount FERET_path ~/feret

Then, go to ~/feret path by

cd feret

run script as follows
cat colorferet.tar.part? | tar -xf -

To be patient, it will take about 10 mins to execute.

23 Jan 2010

如何在Word中输入英语音标?

        下面是键盘中26个英文字母转换后的国际音标对比表:

       
        注:国际音标中的“次重音符号”和“重音符号”分别对应标点中的"分号"和"引号"。

       上述对比表看似很复杂,其实你只要使用过5次就能完全适应这种输入方法。


具体方法如下:



  在Word、Excel、Powerpoint中键盘输入英语音标一直是很多人头疼的事,Word没有提供解决的办法。许多人想到了插入特殊字符但是却很难找全48个国际音标而且要用起来很复杂,还有一些人选择使用金山的图库来粘贴,问题是不能很好的融入到文章中进行大小、颜色、字形等的变化。现在,有个方法解决了这个难题,希望无论对英语教师、学生的音标输入还是对从事其他专门用途的朋友都能提供一点帮助。

         这个方法是目前最简便的一种方法,只要安装专门为中国人输入国际音标而设计的GWIPA字体库,然后在使用Word时就可以像切换其他字体(如Arial、Wingdings等)那样轻松录入音标了!

          现在我们就一步一步来完成安装和使用:   

          1. 首先下载GWIPA国际音标字体库;(不超过19K)

                        点击下载—> GWIPA.ttf               

          2.然后将GWIPA.ttf文件复制到系统盘的 \windows\fonts目录下即可完成安装;
          步骤:点击电脑左下角 开始 -----搜索 windows-----点开windows文件夹,找到 fonts文件夹,点开,把GWIPA.ttf复制进去,完成。

          3. 安装完成后,如何使用:    
          首先,打开Word文档,在字体工具栏中找到“GWIPA”字体,然后大家按一下键盘上的Caps Lock键,试一试,我们会发现在输入大写字母状态时,文档中已经自动转换为相对应的国际音标了。除了用Caps Lock进行切换外,还可以在正常状态下按住Shift键同时按字母键,也可以输出需要的对应音标来。

       问:我用这种方法做出的包含音标的文件用有邮件、QQ、MSN传给了别人,他能正常使用吗?

       答:不能!除非他的电脑也安装了这种字体库!否则音标是不能正常显示的,包括你把它发表到网站上。但你可以把它打印出来使用。如果你一定要把它传给对方使用。你可以:传输文件的同时把这个网址告诉对方,让对方也安装GWIPA字体库。或者:

       把音标转换为图片                    

        打开画图软件(或其它的做图软件),选择文本输入,在字体工具栏中找到“GWIPA”字体,输入你要的音标。完成把它保存为你想要的图片类型。你可以把它发到网上去,或者放到word里面,和其它的内容一起发给别人。这时就不用担心显示的问题了。好了,虽然麻烦了点,但估计也没有更好的办法了。



22 Jan 2010

Firefox 3.6使用旧版插件

Firefox 3.6正式发布,许多插件还没有来得及更新,折中方法如下:





使用旧版插件作少许修改
xpi文件后缀名改为zip,“资源管理器”打开,复制出install.rdf,记事本打开,更改
<em:maxVersion>3.***</em:maxVersion>

<em:maxVersion>3.7</em:maxVersion>

将修改后的install.rdf放回zip替换原文件(可自行备份原有install.rdf),保存。
重新安装插件,大部分插件都能继续使用

21 Jan 2010

AdaBoost人脸检测原理

对人脸检测的研究最初可以追溯到 20 世纪 70 年代,早期的研究主要致力于模板匹配、子空间方法,变形模板匹配等。近期人脸检测的研究主要集中在基于数据驱动的学习方法,如统计模型方法,神经网络学习方法,统计知识理论和支持向量机方法,基于马尔可夫随机域的方法,以及基于肤色的人脸检测。目前在实际中应用的人脸检测方法多为基于 Adaboost 学习算法的方法。




     Viola人脸检测方法是一种基于积分图、 级联检测器和AdaBoost 算法的方法,方法框架可以分为以下三大部分:
     第一部分,使用Harr-like特征表示人脸,使用“ 积分图”实现特征数值的快速计算;
     第二部分, 使用Adaboost算法挑选出一些最能代表人脸的矩形特征( 弱分类器),按照加权投票的方式将弱分类器构造为一个强分类器;
     第三部分, 将训练得到的若干强分类器串联组成一个级联结构的层叠分类器,级联结构能有效地提高分类器的检测速度。

    Adaboost 算法是一种用来分类的方法,它的基本原理就是“三个臭皮匠,顶个诸葛亮”。它把一些比较弱的分类方法合在一起,组合出新的很强的分类方法。

    例如下图中


    需要用一些线段把红色的球与深蓝色的球分开,然而如果仅仅画一条线的话,是分不开的。


a

b

c

d

    使用Adaboost算法来进行划分的话,先画出一条错误率最小的线段如图 1 ,但是左下脚的深蓝色球被错误划分到红色区域,因此加重被错误球的权重,再下一次划分时,将更加考虑那些权重大的球,如 c 所示,最终得到了一个准确的划分,如下图所示。


    人脸检测的目的就是从图片中找出所有包含人脸的子窗口,将人脸的子窗口与非人脸的子窗口分开。

大致步骤如下:

    (1)在一个 20*20 的图片提取一些简单的特征(称为Harr特征),如下图所示。

    它的计算方法就是将白色区域内的像素和减去黑色区域,因此在人脸与非人脸图片的相同位置上,值的大小是不一样的,这些特征可以用来区分人脸和分人脸。

    (2)目前的方法是使用数千张切割好的人脸图片,和上万张背景图片作为训练样本。训练图片一般归一化到 20*20 的大小。在这样大小的图片中,可供使用的 haar 特征数在 1 万个左右,然后通过机器学习算法 —adaboost 算法挑选数千个有效的 haar 特征来组成人脸检测器。


    (3)学习算法训练出一个人脸检测器后,便可以在各个场合使用了。使用时,将图像按比例依次缩放,然后在缩放后的图片的 20*20 的子窗口依次判别是人脸还是非人脸。

人脸检测的流程

    人脸检测在实际中主要用于人脸识别的预处理,即在图像中准确标定出人脸的位置和大小。

    目前人脸检测技术在门禁系统、智能监控系统中已得到了很好的应用。另外,目前的笔记本电脑中也陆续开始使用人脸识别技术作为计算机登录的凭证。近年来,在数码相机和手机中也集成了人脸检测算法,作为一个新的功能提供用户使用。在这些应用中,人脸检测都是发挥着至关重要的作用



Python Tips-实现dict类似class的点操作符

实现dict类似class的点操作符
通过dict['name']或者dict.name取得value.
来自cn.python: Jiahua Huang



class Storage(dict):
    def __new__(cls, *args, **kwargs):
        self = dict.__new__(cls, *args, **kwargs)
        self.__dict__ = self
        return self

>>> student = Storage( )
>>> student['name'] = 'XXOO'
>>> student.name

'XXOO' 


17 Jan 2010

谷歌与美国政府关系非凡 是奥巴马第四大赞助人



美国《政客》网站1月15日发表文章,分析谷歌宣布退出中国事件,折射出谷歌在奥巴马政府拥有非同一般的人脉关系。白宫密切关注此事件,除了出于中美经贸考虑,更重要的是由于事关谷歌。




香港中评社援引这篇题为“在谷歌搜寻奥巴马的对华政策(Googling ObamasChinapolicy)”的文章说,谷歌本周发表声明宣布考虑全面撤出中国市场后数小时,美国国务卿希拉里就发表声明督促北京跟进事件,美国国务院发言人随后也表示,将很快向中国发出外交照会。

白宫发言人吉布斯(RobertGibbs)起初对谷歌声明并未作清晰表态,只简单重申支持网络自由,但在人权组织和共和党的强大压力下,白宫周五还是发言表示“支持谷歌”。其实,白宫密切关注事件,除了出于中美经贸考虑,更重要是由于事件关系谷歌。

谷歌一直在华盛顿默默建立着政治影响力,并聘请了一大群与两党关系密切的合约说客在国会山为其工作,据互动政治研究中心(CenterforResponsivePolitics)资料显示,谷歌过去几年用于国会游说的资金以几何级数急增,从2003年的八万美元急增至去年的三百万美元。

谷歌在去年总统大选也出钱出力,是奥巴马竞选阵营的第四大资助者,其科技产品更对奥巴马起着推波助澜之效,其CEO施密特(EricSchmidt)也担任了奥巴马的特别竞选顾问。

奥巴马胜选以后,谷歌也赞助了民主党内外多个庆祝活动,两位高层施密特和德拉蒙德(Drummond)更自掏腰包十六万美元赞助总统就职典礼。显然,这家市值三百亿美元的互联网巨头对奥巴马来说,绝对有着特殊意义。

其后,奥巴马筹组新班子时也延揽了谷歌三位前高层史坦顿(KatieStanton)、沙亚(SonalShah)和安德鲁(AndrewMcLaughlin)进入政府,施密特再获委任为总统信息科技委员会委员。就在谷歌发表“考虑撤华”声明的前几天,施密特也在白宫与希拉里共晋晚餐,但消息人士透露,双方当时并未讨论撤华一事。

上任以来,奥巴马政府也对谷歌赞誉有加,白宫一位高官曾如此形容,“默多克所建立的新闻集团可比英国首相张伯伦;今日谷歌也可堪比丘吉尔。”

14 Jan 2010

Show new post in you blog

To add the "Newest Post" module to blog like I did,



add a HTML/JavaScript module then copy and paste the following script.
you can also change the parameters to control the appreance.
Please read the comments and backup your template before your action.


<script>
//credit to hoctro
function rp(json) {
    document.write('<ul>');

    for (var i = 0; i < numposts; i++) {
        document.write('<li>');
        var entry = json.feed.entry[i];
        var posttitle = entry.title.$t;
        var posturl;

        if (i == json.feed.entry.length) break;

        for (var k = 0; k < entry.link.length; k++) {
            if (entry.link[k].rel == 'alternate') {
                posturl = entry.link[k].href;
                break;
            }
        }

        posttitle = posttitle.link(posturl);
        var readmorelink = "(more)";
        readmorelink = readmorelink.link(posturl);
        var postdate = entry.published.$t;
        var cdyear = postdate.substring(0,4);
        var cdmonth = postdate.substring(5,7);
        var cdday = postdate.substring(8,10);
        var monthnames = new Array();
        monthnames[1] = "Jan";
        monthnames[2] = "Feb";
        monthnames[3] = "Mar";
        monthnames[4] = "Apr";
        monthnames[5] = "May";
        monthnames[6] = "Jun";
        monthnames[7] = "Jul";
        monthnames[8] = "Aug";
        monthnames[9] = "Sep";
        monthnames[10] = "Oct";
        monthnames[11] = "Nov";
        monthnames[12] = "Dec";

        if ("content" in entry) {
            var postcontent = entry.content.$t;
        } else if ("summary" in entry) {
            var postcontent = entry.summary.$t;
        } else
            var postcontent = "";
            var re = /<\S[^>]*>/g;
            postcontent = postcontent.replace(re, "");
            document.write(posttitle);

            if (showpostdate == true) document.write(' - ' + monthnames[parseInt(cdmonth,10)] + ' ' + cdday);

        if (showpostsummary == true) {
            if (postcontent.length < numchars) {
                document.write(postcontent);
            } else {
                postcontent = postcontent.substring(0, numchars);
                var quoteEnd = postcontent.lastIndexOf(" ");
                postcontent = postcontent.substring(0,quoteEnd);
                document.write(postcontent + '...' + readmorelink);
            }
        }
        document.write('</li>');
    }
    document.write('</ul>');

}
</script>

<script>
// parameters
var numposts = 10; //number to show
var showpostdate = false; // show date
var showpostsummary = false; // show summary
var numchars = 100; // summary chars
</script>

<h2>New Post</h2>
<script src="http://your-site-url/feeds/posts/default?orderby=published&alt=json-in-script&callback=rp"></script>

Compile & Run Python Scripts with PSPad

PSPad is a great editor for programmers. Instead of using a dedicated Python IDE, PSPad can be tweaked to compile and run scripts directly. Here’s how: -


pspad


  • Go to Settings -> Highlighters Settings
  • Select “Python” in the left hand pane (if its not selected already)
  • Select the “Compiler” tab
  • In the “compiler” text box, enter or browse to the location of the Python compiler
  • In the “parameters” text box, you have 2 choice, which are corresponed to later actions:



    • 1. enter “%File%” (with the double quotes) this is the official way to do it.
    • 2. enter “%name%.py” (without the double quotes) I use this one.



  • Put a tick box in the “Capture Program Output Window” option
  • If you just want to run the python code, it's OK now. If you want to see the result in a seperate window, go on:



    • 1. enter "cmd /c python "%File%" && pause" (without the double quotes)
    • 2. enter "cmd /c python "%name%.py" && pause" (without the double quotes)





here are 2 pics about my configration:




网友笑谈google离去

Google离开的真相,网络搞笑歌曲.纯属搞笑

对于google高调的离去,只能对它说:走好,不送!
你在欧美国家的搜索结果何尝不需要针对当地法律政策作出filter,
到了中国却拿这个出来说事儿,还企图让自己站立在道德高度,
说句没素质的话:滚NM蛋!



    百度:爸爸!
    工信部:诶
    百度:绿坝什么时候装啊?
    工信部:今年7月
    百度:它会真的屏蔽我吗?
    爸爸:没事,别怕!
    百度:它会让Google滚蛋吗?
    爸爸:让Google回家吧
    合:我好开心我们就是吉祥的一家。。。

    百度:妈妈
    CCAV:诶
    百度:四千万到帐了吗?
    CCAV:恩哪
    百度:这下能帮我搞定Google了吗?
    CCAV:马上就好
    百度:还有我的事情你可千万可别说啊!
    CCAV:怎么会呢?
    合:谁叫我们都是吉祥的一家

    工信部:孩子他妈!
    CCAV:啊
    工信部:杀只鸡给猴看好吗?
    CCAV:杀那只呢?
    爸爸:杀了Google一箭三雕啊!
    CCAV:是吗?
    爸爸妈妈:绿坝、百度,你还可以敲诈!
    CCAV:哦
    合:我们三个就是吉祥如意的一家

5 Jan 2010

ZT-震惊!!用windows7自带的资源监视器之下的QQ可疑行为!

作者:blackdream1890   来源:http://bbs.pcbeta.com/viewthread.php?tid=660232&extra&page=1




[此贴完成仓促。可以接受在保持原意的情况下的任何修改、复制。]


最近看到有朋友一直在议论疼逊QQ在后台进行大量匪夷所思的“可疑动作”的帖子

心里也是毛毛的。在通过windows7自带的资源监视器中,对QQ进行的一些监视之后,实在让我大为吃惊。它疯狂“触碰”着我电脑里的很多文件。每一次一登录,用资源管理器”监视“着它的一举一动时,发现。

hotmail客户端、MSN、杀软、skype、firefox浏览器、私人文件夹、支付宝数字证书,它几乎触碰过我电脑里的所有文件。一开始的截图如下。

这些都是大概一个星期以内的截图:








于是向官方反馈了问题。






在向官方反馈了问题以后。我就没有再用QQ的本地客户端。最近一个星期也没有再上过QQ。期间上过一次。但是用的是webQQ。

得到的官方的回复如下:





这个就是客服的回复.....此贴完成仓促。可以接受在保持原意的情况下的任何修改、复制。

大概只有大家的意识都警惕起来。麻花藤才不会这么嚣张。

一个即时聊天工具有需要读取如此多的不相关的文件吗?

腾讯QQ是如何监视你的聊天记录的,一篇2006年的新闻报道

http://www.jysls.com/thread-73302-1-1.html