彩色图片颜色相似度,直方图相交法matlab
RGB三通道直方图分别用直方图相交法,分别得出相似度,然后求均值。
代码如下:
clc;
close all;
clear all;
r1=imread('1.jpg');
r2=imread('2.jpg');
r1=imresize(r1,[300,300]);
r2=imresize(r2,[300,300]);
r1 = mat2gray(r1);
r2 = mat2gray(r2);
x=0:1:255;
R1 = r1(:,:,1);
G1 = r1(:,:,2);
B1 = r1(:,:,3);
H_R1=imhist(R1);
H_G1=imhist(G1);
H_B1=imhist(B1);
R2 = r2(:,:,1);
G2 = r2(:,:,2);
B2 = r2(:,:,3);
H_R2=imhist(R2);
H_G2=imhist(G2);
H_B2=imhist(B2);
subplot(231);imshow(r1);title('图1');
subplot(232);imshow(r2);title('图2');
subplot(234);plot(x,H_R1,'b',x,H_R2,'r:');title('R通道直方图');legend('图1','图2');
subplot(235);plot(x,H_G1,'b',x,H_G2,'r:');title('G通道直方图');legend('图1','图2');
subplot(236);plot(x,H_B1,'b',x,H_B2,'r:');title('B通道直方图');legend('图1','图2');
for i=1:length(H_R1)
if H_R1(i,1)<=H_R2(i,1)
y1(i,1)= H_R1(i,1);
else
y1(i,1)= H_R2(i,1);
end
if H_G1(i,1)<=H_G2(i,1)
y2(i,1)= H_G1(i,1);
else
y2(i,1)= H_G2(i,1);
end
if H_B1(i,1)<=H_B2(i,1)
y3(i,1)= H_B1(i,1);
else
y3(i,1)= H_B2(i,1);
end
end
s1=min([sum(H_R1),sum(H_R2)]);
f1=(sum(sum(y1))/s1);
s2=min([sum(H_G1),sum(H_G2)]);
f2=(sum(sum(y2))/s2);
s3=min([sum(H_B1),sum(H_B2)]);
f3=(sum(sum(y3))/s3);
f=mean([f1,f2,f3]);
subplot(233);text(0.5,.5,{'颜色相似度',num2str(f)},'FontSize',24,'HorizontalAlignment','center');
运行结果如下所示:
代码很简单,所以没有注释,有兴趣的可以试一试