資源簡介
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
評論
共有 條評論