【Matlab/CV系列】数字图像颜色特征提取及Matlab实现

Date: 2019.4.9


前言

    颜色特征是在图像检索中应用最为广泛的视觉特征。颜色特征是一种全局特征,描述了图像或图像区域所对应的景物的表面性质。数字图像的颜色特征包括颜色直方图 、颜色矩、颜色相关图和颜色聚合向量等。 本文主要是对各种图像颜色特征提取方法和实现进行介绍。

1、参考

颜色特征提取
图像特征提取(纹理特征)
图像检索:颜色聚合向量(CCV)及matlab实现

2、RGB空间颜色直方图
I=imread('lena.jpg');
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
figure,imhist(R);
title('R');
figure,imhist(G);
title('G');
figure,imhist(B);
title('B');  
3、RGB空间颜色矩
firstMoment = mean(mean(I)); % 一阶颜色矩
difference = I(:,:,m) - firstMoment(1,1,m); %差分颜色矩
secondMoment(m,1) = sqrt(mean(mean(difference.*difference))); % 二阶颜色矩
thirdMoment(m,1) = nthroot(mean(mean(difference.*difference.*difference)),3); % 三阶颜色矩
4、颜色聚合向量

颜色聚合向量(color coherence vector,CCV)是一种颜色特征,它包含了颜色分布的空间信息。克服了颜色直方图无法表达图像色彩的空间位置的缺点。

颜色聚合向量是一种更复杂颜色直方图。它将每个像素分类为聚合的(coherence pixels)或非聚合的(incoherence pixels)。聚合的像素指的是,该像素属于一个大的连通区域;而非聚合像素指的是,像素位于一个小的连通区域。连通区域大小的标准有我们自己来定,通常为整幅图像像素的1%。大于1%,是大的连通区域。

function CCV = getCCV(img,coherentPrec, numberOfColors)  
    if ~exist('coherentPrec','var')  
        coherentPrec = 1;  
    end  
    if ~exist('numberOfColors','var')  
        numberOfColors = 27;  
    end  
    CCV = zeros(2,numberOfColors);  
    %高斯滤波  
    Gaus = fspecial('gaussian',[5 5],2);  
    img = imfilter(img,Gaus,'same');  
      
    [img, updNumOfPix]= discretizeColors(img,numberOfColors);  %量化  
      
    imgSize = (size(img,1)*size(img,2));  
    thresh = int32((coherentPrec/100) *imgSize);  
      
    parfor i=0:updNumOfPix-1  
        BW = img==i;  
        CC = bwconncomp(BW);  
        compsSize = cellfun(@numel,CC.PixelIdxList);  
        incoherent = sum(compsSize(compsSize>=thresh));  
        CCV(:,i+1) = [incoherent; ...  
            sum(compsSize) - incoherent];  
    end  
end 

THE END!

在这里插入图片描述

你可能感兴趣的:(【计算机视觉与图像处理】,【编程语言之Matlab】,【实用毕设项目】)