颜色相关图

来源:互联网 发布:安东尼体测数据 编辑:程序博客网 时间:2024/05/28 06:06
 

        Huang J提出一种新的特征-颜色相关图用于图像检索,并证明在基于内容的图像检索中颜色相关图特征要优于比颜色直方图。传统的颜色直方图只刻画了某一种颜色的像素数目占像素总数目的比例,只是一种全局的统计关系,而颜色相关图则表达了颜色随距离变换的空间关系,也就是颜色相关图不仅包含图像颜色统计信息,同时包括颜色之间的空间关系。

 

    参考文献:

        Huang J, Color-spatial image indexing and application [D], Corneli University1998

 

    自己写的代码:

    

% Author: xudongbin
% Date: 2008-07-20
% Email: dongbinxu@yahoo.com.cn
function [C, hc] = correlogram(I, levelwidth, hd, vd, autoflag, flag)
% correlogram histogram
% I - Input image, levelwidth - quantilize width, hd - horizontal distance,
% vd - vertical distance,
% auto-flag - the flag of auto-correlogram, 0 - correlogram; 1 -
% auto-correlogram
% flag - the flag of normalization, 1 - normalize; 0 - none normalize

[H W D] = size(I);
I_chg = floor( double(I) / levelwidth );
level = floor(255/levelwidth) + 1;

if D == 1
    C(1:level,1:level) = 0;
    for i = 1 : H - vd
        for j = 1 : W - hd
            m = I_chg(i, j)+1;
            n = I_chg(i + vd, j + hd)+1;
            C(m, n) = C(m, n) + 1;
            C(n, m) = C(n, m) + 1;
        end
    end
   
    for i = 1 : H - vd
        for j = hd + 1 : W
            m = I_chg(i, j) + 1;
            n = I_chg(i + vd, j - hd) + 1;
            C(m, n) = C(m, n) + 1;
            C(n, m) = C(n, m) + 1;
        end
    end
    for i = 1:level
        C(i, i) = C(i, i) / 2;
    end
    if autoflag
        for i = 1:level
            hc(i) = C(i, i)
        end
    else
        %convert matrix C into vector
        n = 1;
        for i = 1:level
            for j = i:level
              hc(n) = C(i, j);
              n = n + 1;
            end
        end  
    end
else
    C(1:level,1:level,1:level,1:level,1:level) = 0;
    sumc = 0;
    for i = 1:H - vd
        for j = 1:W - hd
            m = I_chg(i, j, 1);
            n = I_chg(i, j, 2);
            k = I_chg(i, j, 3);
            a = I_chg(i + vd, j + hd, 1);
            b = I_chg(i + vd, j + hd, 2);
            c = I_chg(i + vd, j + hd, 3);
            C(m, n, k, a, b, c) = C(m, n, k, a, b, c) + 1;       
            sumc = sum + 1;
        end
    end   
end
if flag == 1
    hc = hc / (sum(hc) + eps);
    C = C / (sum(sum(C)) + eps);
end

原创粉丝点击