根据特征索引号提取某一系列的特征值

来源:互联网 发布:哈密顿回路算法c语言 编辑:程序博客网 时间:2024/05/16 08:10

     对样本进行分类时,需要提取该样本的特征。由于AdaBoost分类器是由一系列的基于一系列单个特征的弱分类器组成的,因此只需要提取弱分类器所需要的特征即可。以前采取的方式是,提取所有的特征,分类时获得所需要的特征即可;该过程提取了大量没有使用的特征,这些没有使用的特征花费了大量的计算,是无效计算。现在需要解决这个问题。当需要某个特征时,则计算该特征;不需要该特征时,则不计算该特征。但该方法也存在重复计算问题。比如计算Gabor变换特征,需要先进行Gabor变换,然后再计算特征某特征A,或者某特征B;如果同时需要计算两个特征A和B,那么对图像进行了两次Gabor变换,其中有一次属重复计算。

     现在采取折中的方式。当需要某特征时,则计算该系列的所有特征。

% 
% identifySeriesFeatureByIndex
% 
% 计算该特征编号所属的一个系列的特征值
% 
% seriesFeatures 提取的包含index号特征的系列特征
% seriesIndex    该系列特征在该方法中的绝对索引位置
% 
% 2007-11-06
function [seriesFeatures,seriesIndex]
=identifySeriesFeatureByIndex(image,index)
feaCntSequence
=[1 12 12 12 64 176 15 64 15 21];  % 每种方法能够获取的特征数量列表
feaCntCumSequence
=cumsum(feaCntSequence);        % 累计特征数量
methodCnt
=length(feaCntCumSequence);             % 特征提取方法的种类 

% 特征提取方法索引号
% 索引与方法名称对应关系为
% 1  RGB颜色空间特征值      
% 2  HSI颜色空间特征值     
% 3  NTSC颜色空间特征值    
% 4  gabor变换提取的纹理特征 
% 5  灰度共生矩阵纹理特征值
% 6  灰度-梯度共生矩阵纹理特征  
% 7  灰度差分统计特征值: 
% 8  灰度行程长度统计方法
% 9  不变矩特征
methodIndex
=0;    
if( (index<feaCntCumSequence(1)) || (index>=feaCntCumSequence(methodCnt)) )
    error([
'特征编号(' num2str(index) ')必须在区间[' num2str(feaCntCumSequence(1))...
         
' ' num2str(feaCntCumSequence(methodCnt)-1']中!']);
end

for cnt=1:methodCnt % 由索引号确定提取特征的方法
    
if( (index>=feaCntCumSequence(cnt)) && (index<feaCntCumSequence(cnt+1)) )
        methodIndex
=cnt;
        
break;
    end
end

% 特征提取方法内部索引号,通过该索引求取特征提取方法的参数
% 比如,第25号特征为第三种方法(NTSC颜色)的第1个特征(Y均值)
% 故methodIndex=3,innerMethodIndex=1
% 第47号特征为第四种方法(Gabor)的第11个特征
% 此时methodIndex=4,innerMethodIndex=11
% 通过索引11计算参数:频率索引(1),频率值(0.5);方向索引(6),方向(1.9635)
% 第234号特征为灰度共生矩阵纹理第134个特征
% 此时methodIndex=4,innerMethodIndex=134
% 通过索引134可计算参数:位置算子索引(16),位置算子([5 2]),该位置算子上第2个特征
innerMethodIndex 
= index-feaCntCumSequence(cnt)+1;

if( methodIndex>3 || methodIndex<9 ) % 纹理特征需要针对灰度图像
    grayimage
=rgb2gray(image);
end 
switch( methodIndex )
    
case 1       % RGB颜色空间特征值
        [seriesFeatures,seriesIndex]
=identifyColorFeatureByIndex(image,'RGB',innerMethodIndex);
    
case 2       % HSI颜色空间特征值
        [seriesFeatures,seriesIndex]
=identifyColorFeatureByIndex(image,'HSI',innerMethodIndex);
    
case 3       % NTSC颜色空间特征值
        [seriesFeatures,seriesIndex]
=identifyColorFeatureByIndex(image,'NTSC',innerMethodIndex);        
    
case 4       % Gabor变换提取的纹理特征
        [seriesFeatures,seriesIndex]
=identifyGaborFeatureByIndex(grayimage,innerMethodIndex);
    
case 5       % 灰度共生矩阵纹理特征值
        [seriesFeatures,seriesIndex]
=identifyGLCMFeatureByIndex(grayimage,innerMethodIndex);
    
case 6       % 灰度-梯度共生矩阵纹理特征
        [seriesFeatures,seriesIndex]
=identifyGGLCMFeatureByIndex(grayimage,innerMethodIndex);
    
case 7       % 灰度差分统计特征值
        [seriesFeatures,seriesIndex]
=identifyGDSFeatureByIndex(grayimage,innerMethodIndex);
    
case 8       % 灰度行程长度统计方法
        [seriesFeatures,seriesIndex]
=identifyGRLSFeatureByIndex(grayimage,innerMethodIndex);
    
case 9       % 不变矩特征
        [seriesFeatures,seriesIndex]
=identifyIMFeatureByIndex(image,innerMethodIndex);
    otherwise
        error(
'方法编号错误!');
end

seriesIndex
=feaCntCumSequence(methodIndex)-1+seriesIndex; % 提取的系列特征的绝对索引位置


% 根据特征索引号确定 RGB、HSI、NTSC颜色空间特征值
% colorspacename 仅能取值'RGB','HSI','NTSC'
% index 应在1-12 之间
% seriesFeatures 提取的包含index号特征的系列特征
% seriesIndex    该系列特征在该方法中的相对位置
function [seriesFeatures,seriesIndex]
=identifyColorFeatureByIndex(image,colorspacename,index)
featureSpaceSize
=12;                    % 特征空间维数
[seriesFeatures]
=extractColorFeature(image,colorspacename);% 提取特征 
seriesIndex
=1:featureSpaceSize;


% 根据特征索引号确定 Gabor变换提取的纹理特征
% seriesFeatures 提取的包含index号特征的系列特征
% seriesIndex    该系列特征在该方法中的相对索引位置
function [seriesFeatures,seriesIndex]
=identifyGaborFeatureByIndex(image,index)
fList
=[0.5 0.25 0.125 0.1];   % Gabor变换的频率列表
thetaList
=((0:7)/8).*pi;      % Gabor变换方向(theta)列表
fLen
=length(fList);           % 频率数量
thetaLen
=length(thetaList);   % 方向数量
featureSpaceSize
=2;           % Gabor变换 特征空间大小

paramIndex
=floor((index-1)/featureSpaceSize)+1;% 确定参数的索引号
fIndex
=ceil(paramIndex/thetaLen);        % 参数索引:频率
thetaIndex
=mod(paramIndex-1,thetaLen)+1% 参数索引:方向
[seriesFeatures]
=extractGaborFeature(image,fList(fIndex),thetaList(thetaIndex));
seriesIndex
=((paramIndex-1)*featureSpaceSize+1):(paramIndex*featureSpaceSize);

% 根据特征索引号确定 灰度共生矩阵纹理特征值
% seriesFeatures 提取的包含index号特征的系列特征
% seriesIndex    该系列特征在该方法中的相对索引位置
function [seriesFeatures,seriesIndex]
=identifyGLCMFeatureByIndex(image,index)
% 位置算子
offset
=[0 1;0 5;1 0;5 0;1 1;1 -1;5 5;5 -5;2 5;2 -5;4 5;4 -5;5 2;5 -2;5 4;5 -4];
featureSpaceSize
=11;                     % 灰度共生矩阵 特征空间大小
offsetIndex
=floor((index-1)/featureSpaceSize)+1;% 参数索引:位置算子
[seriesFeatures]
=extractCoOccureTextFeature(image,offset(offsetIndex,:));
seriesIndex
=((offsetIndex-1)*featureSpaceSize+1):(offsetIndex*featureSpaceSize);


% 根据特征索引号确定 灰度-梯度共生矩阵纹理特征
% seriesFeatures 提取的包含index号特征的系列特征
% seriesIndex    该系列特征在该方法中的相对索引位置
function [seriesFeatures,seriesIndex]
=identifyGGLCMFeatureByIndex(image,index)
featureSpaceSize
=15;                     % 灰度-梯度共生矩阵 特征空间大小
[seriesFeatures]
=extractGGLCMSFeature(image);
seriesIndex
=1:featureSpaceSize;
 
% 根据特征索引号确定 灰度差分统计特征值
% seriesFeatures 提取的包含index号特征的系列特征
% seriesIndex    该系列特征在该方法中的相对索引位置
function [seriesFeatures,seriesIndex]
=identifyGDSFeatureByIndex(image,index)
% 灰度差分统计的位置算子
offset
=[0 1;0 3;0 5;1 0;3 0;5 0;1 1;2 2;4 4;5 5;1 3;3 1;2 4;4 2;3 5;5 3];
featureSpaceSize
=4;                      % 灰度差分统计 特征空间维数
offsetIndex
=floor((index-1)/featureSpaceSize)+1;% 参数索引:位置算子
[seriesFeatures]
=extractGrayDifferStatFeature(image,offset(offsetIndex,:));
seriesIndex
=((offsetIndex-1)*featureSpaceSize+1):(offsetIndex*featureSpaceSize);


% 根据特征索引号确定 灰度行程长度统计方法
% seriesFeatures 提取的包含index号特征的系列特征
% seriesIndex    该系列特征在该方法中的相对索引位置
function [seriesFeatures,seriesIndex]
=identifyGRLSFeatureByIndex(image,index)
thetaList
=[0 pi/4 pi/2];     % 默认 行程方向
featureSpaceSize
=5;          % 行程长度统计 特征空间维数
thetaIndex
=floor((index-1)/featureSpaceSize)+1;% 参数索引:行程方向
[seriesFeatures]
=extractGRLMFeature(image,thetaList(thetaIndex));
seriesIndex
=((thetaIndex-1)*featureSpaceSize+1):(thetaIndex*featureSpaceSize);


% 根据特征索引号确定 不变矩特征
% seriesFeatures 提取的包含index号特征的系列特征
% seriesIndex    该系列特征在该方法中的相对索引位置
function [seriesFeatures,seriesIndex]
=identifyIMFeatureByIndex(image,index)
colorspacesize
=size(image,3);            % 颜色平面数量,灰度图像为1,彩色图像为3           
featureSpaceSize
=7;                      % 不变矩特征 特征维数
spaceIndex
=floor((index-1)/featureSpaceSize)+1;% 参数索引:颜色平面索引
[seriesFeatures]
=extractInvariantMomentFeature(image,spaceIndex);
seriesIndex
=((spaceIndex-1)*featureSpaceSize+1):(spaceIndex*featureSpaceSize);


测试100幅图片,原始方法需耗时132s,现在耗时34s,只有原来的1/4。但仍然重复计算了一些没有使用的特征。

仍需要改进。

 

由重新组织样本,修正特征、增加特征,已经花费了接近三周。速度太慢了。

余下工作:构建 级联AdaBoost 分类器(需在11月15日前完成)

                   12月前完成所有基于新样本的重复试验

                   12月 :prepare the paper

                    1月   :write paper

                  

原创粉丝点击