• 大小: 0M
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: 其他  

资源简介

HC.zip

资源截图

代码片段和文件信息

%% 读取图片
img=imread(‘D:\大三下资料\图像目标探测,跟踪与识别技术\实验\实验四\MSRA10K\images\124.jpg‘);
img=im2double(img);
%% 色调分离
Rchannel=img(::1); %分离三通道
Gchannel=img(::2);
Bchannel=img(::3);
N=12; %色阶数为12
Step=1/(N-1);
T(1:N)=0; %色阶区间
for i=1:N  
    T(i)=(i-1)*Step;  
end
[rowscols]=size(Rchannel);
for i=1:rows
    for j=1:cols
    Rchannel(ij)=T(floor(Rchannel(ij)/Step)+1);
    Gchannel(ij)=T(floor(Gchannel(ij)/Step)+1);
    Bchannel(ij)=T(floor(Bchannel(ij)/Step)+1);
    end
end
img(::1)=Rchannel; %通道合并
img(::2)=Gchannel;
img(::3)=Bchannel;
clear N Step;
%至此,256*256*256的颜色被分配到12*12*12的新颜色空间中
%% 建立直方图,寻找高频颜色
img12=img*11+1; %使img范围为1~12,方便计算
colorSpace=zeros(121212); %创建12*12*12的RGB颜色空间
for i=1:rows
    for j=1:cols
        r=img12(ij1); %计算颜色空间中的颜色向量
        g=img12(ij2);
        b=img12(ij3);
        colorSpace(rgb)=colorSpace(rgb)+1;
    end
end

%已经建立颜色空间(直方图),下面寻找高频颜色
totalPixel=0; %用于记录已经数过的像素
colorNum=0; %用于记录高频颜色个数
while totalPixel<(0.95*rows*cols) %当数过的像素小于95%总像素时,继续数
    maxProp=max(max(max(colorSpace))); %找到像素数最多的那个颜色
    sameNum=length(colorSpace(colorSpace==maxProp)); %重复概率的数量
    totalPixel=totalPixel+sameNum*maxProp;
    colorNum=colorNum+sameNum;
    colorSpace(colorSpace==maxProp)=-1; %使数过的空间位置置-1,表示此点属于高频颜色点
end
clear totalPixel;

%已经找到高频颜色,下面将低频颜色分配到最近的高频颜色中
[r0g0b0]=ind2sub(size(colorSpace)find(colorSpace==-1)); %找到空间中所有高频颜色的空间位置
while ~isempty(colorSpace(colorSpace>0)) %当颜色空间中还有未分配的颜色时,继续循环
    maxProp=max(max(max(colorSpace)));
    [rgb]=ind2sub(size(colorSpace)find(colorSpace==maxProp)); %找到剩余最高频颜色所在的空间位置
    colorSpace(colorSpace==maxProp)=-2;
    for i=1:length(r)
        distance=zeros(length(r0)1);
        for j=1:length(r0) %遍历所有高频颜色位置
            distance(j)=(r(i)-r0(j))^2+(g(i)-g0(j))^2+(b(i)-b0(j))^2; %求出距离(的平方)
        end
        minD=min(distance); %最近的距离
        label=find(distance==minD); %找到最小距离对应的序号
        rGive=r0(label(1));
        gGive=g0(label(1));
        bGive=b0(label(1)); %(rGivegGivebGive)即是给(r(i)g(i)b(i))分配的颜色
        for m=1:rows
            for n=1:cols
                if img12(mn1)==r(i) && img12(mn2)==g(i) && img12(mn3)==b(i)
                    img12(mn1)=rGive;
                    img12(mn2)=gGive;
                    img12(mn3)=bGive;
                end
            end
        end
    end
end
clear r0 g0 b0 r g b r1 b1 g1 label minD maxProp distance rGive gGive bGive;
%% 计算显著性
%某个颜色的显著性即该颜色与其他所有颜色之间的距离之和
[r0g0b0]=ind2sub(size(colorSpace)find(colorSpace==-1)); %找到空间中所有高频颜色的空间位置
S=zeros(length(r0)1); %显著性
result=zeros(rowscols); %结果矩阵
for i=1:length(r0)
    for j=1:length(r0)
        if j==i
            continue
        end
        S(i)=S(i)+sqrt((r0(i)-r0(j))^2+(g0(i)-g0(j))^2+(b0(i)-b0(j))^2);
    end
    for m=1:rows
        for n=1:cols
            if img12(mn1)==r0(i) && img12(mn2)==g0(i) && img12(mn3)==b0(i)
                result(mn)=S(i);
       

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        3505  2018-05-10 21:05  calculateHC.m
     文件         123  2018-05-08 23:40  normalization.m

评论

共有 条评论