特征提取与图像处理
人脸图像特征提取:人脸识别系统可使用的特征通常分为视觉特征、像素统计特征、人脸图像变换系数特征、人脸图像代数 特征等。
人脸特征提取就是针对人脸的某些特征进行的。
人脸特征提取,也称人脸表征,它是对人脸进行特征建模的过程。
人脸特征提取的方法归纳起来分为两大 类:一种是基于知识的表征方法;另外一种是基于代数特征或统计学习的表征方法。
基于知识的表征方法主要是根据人脸器官的形状描述以及他们之间的距离特性来获得有助于人脸分类的特征数据,其特征分 量通常包括特征点间的欧氏距离、曲率和角度等。
人脸由眼睛、鼻子、嘴、下巴等局部构成,对这些局部和它们之间结构关系的几何描述,可作为识别人脸的重要特 征,这些特征被称为几何特征。
基于知识的人脸表征主要包括基于几何特征的方法和模板匹配法。
图像的特征提取都有哪些算法
图像的特征可分为两个层次,包括低层视觉特征,和高级语义特征。
低层视觉特征包括纹理、颜色、形状三方面。
语义特征是事物与事物之间的关系。
纹理特征提取算法有:灰度共生矩阵法,傅里叶功率谱法颜色特征提取算法有:直方图法,累计直方图法,颜色聚类法等等。
形状特征提取算法有:空间矩特征等等高级语义提取:语义网络、数理逻辑、框架等方法
图像的特征提取有什么用的
其实学数字图像处理,关键的不是源代码(和一般编程还是有区别的,这个是经验之谈,其实一般博导未必会编程,但是你和他说说你的方法,他一般都能切中要害),而是你能理解基于概念及适用场所。
基于颜色、纹理、形状都属于低层特征,这些你理解就够了,关键是对你的课题适合哪种方法来映射到高层语义上面,例如:识别物体轮廓,那可能形状就比较适合等。
我之所以写上面那段话,主要是我感觉你索取代码也不说明具体要求,也就是方向不明确。
如今颜色特征提取算法有很多,诸如颜色直方图、颜色矩、颜色集、颜色聚合向量、颜色相关图等,既然你没说,我就给个IEEE CSVT 2001的一篇关于颜色直方图法的论文(源码版权归作者所有):function colorhist = colorhist(rgb) % CBIR_colorhist() --- color histogram calculation % input: MxNx3 image data, in RGB % output: 1x256 colorhistogram == (HxSxV = 16x4x4) % as the MPEG-7 generic color histogram descriptor % [Ref] Manjunath, B.S.; Ohm, J.-R.; Vasudevan, V.V.; Yamada, A., "Color and texture descriptors" % IEEE Trans. CSVT, Volume: 11 Issue: 6 , Page(s): 703 -715, June 2001 (section III.B) % check input if size(rgb,3)~=3 error('3 components is needed for histogram'); end % globals H_BITS = 4; S_BITS = 2; V_BITS = 2; %rgb2hsv可用rgb2hsi代替,见你以前的提问。
hsv = uint8(255*rgb2hsv(rgb)); imgsize = size(hsv); % get rid of irrelevant boundaries i0=round(0.05*imgsize(1)); i1=round(0.95*imgsize(1)); j0=round(0.05*imgsize(2)); j1=round(0.95*imgsize(2)); hsv = hsv(i0:i1, j0:j1, :); % histogram for i = 1 : 2^H_BITS for j = 1 : 2^S_BITS for k = 1 : 2^V_BITS colorhist(i,j,k) = sum(sum( ... bitshift(hsv(:,:,1),-(8-H_BITS))==i-1 &... bitshift(hsv(:,:,2),-(8-S_BITS))==j-1 &... bitshift(hsv(:,:,3),-(8-V_BITS))==k-1 )); end end end colorhist = reshape(colorhist, 1, 2^(H_BITS+S_BITS+V_BITS)); % normalize colorhist = colorhist/sum(colorhist);%基于纹理特征提取灰度共生矩阵用于纹理判断% Calculates cooccurrence matrix % for a given direction and distance%% out = cooccurrence (input, dir, dist, symmetric);%% INPUT:% input: input matrix of any size%% dir: direction of evaluation% "dir" value Angle% 0 0% 1 -45% 2 -90% 3 -135% 4 -180% 5 +135% 6 +90% 7 +45%% dist: distance between pixels%% symmetric: 1 for symmetric version% 0 for non-symmetric version%% eg: out = cooccurrence (input, 0, 1, 1);% Author: Baran Aydogan (15.07.2006)% RGI, Tampere University of Technology% baran.aydogan@tut.fifunction out = cooccurrence (input, dir, dist, symmetric);input = round(input);[r c] = size(input);min_intensity = min(min(input));max_intensity = max(max(input));out = zeros(max_intensity-min_intensity+1);if (dir == 0) dir_x = 0; dir_y = 1;endif (dir == 1) dir_x = 1; dir_y = 1;endif (dir == 2) dir_x = 1; dir_y = 0;endif (dir == 3) dir_x = 1; dir_y = -1;endif (dir == 4) dir_x = 0; dir_y = -1;endif (dir == 5) dir_x = -1; dir_y = -1;endif (dir == 6) dir_x = -1; dir_y = 0;endif (dir == 7) dir_x = -1; dir_y = 1;enddir_x = dir_x*dist;dir_y = dir_y*dist;out_ind_x = 0;out_ind_y = 0;for intensity1 = min_intensity:max_intensity out_ind_x = out_ind_x + 1; out_ind_y = 0; [ind_x1 ind_y1] = find (input == intensity1); ind_x1 = ind_x1 + dir_x; ind_y1 = ind_y1 + dir_y; for intensity2 = min_intensity:max_intensity out_ind_y = out_ind_y + 1; [ind_x2 ind_y2] = find (input == intensity2); count = 0; for i = 1:size(ind_x1,1) for j = 1:size(ind_x2,1) if ( (ind_x1(i) == ind_x2(j)) && (ind_y1(i) == ind_y2(j)) ) count = count + 1; end end end out(out_ind_x, out_ind_y) = count; endendif (symmetric) if (dir < 4) dir = dir + 4; else dir = mod(dir,4); end out = out + cooccurrence (input, dir, dist, 0); end
亖呉?盀