在MATLAB中利用颜色直方图提高基于内容的图像检索性能

在MATLAB中利用颜色直方图提高基于内容的图像检索性能,matlab,image-processing,computer-vision,matlab-cvst,Matlab,Image Processing,Computer Vision,Matlab Cvst,我正在使用MATLAB中的颜色直方图研究基于内容的图像检索和精确召回图。从那时起,我的数据库中有1000张图片。当我查询输入图像时,执行和显示PR曲线大约需要12秒。我很想知道,如何提高绩效 代码: 经过的时间是12.700687秒。当我读到这个问题时,我的观点是:在Matlab中,12秒内有1000个图像,非常快!:希望有人能帮忙。顺便说一句,要想知道什么需要更多的时间,你应该执行和计时你的代码,Matlab会告诉你什么需要更多的时间,而不需要将你的代码移植到MEX,这是你能得到的最快速度。。

我正在使用MATLAB中的颜色直方图研究基于内容的图像检索和精确召回图。从那时起,我的数据库中有1000张图片。当我查询输入图像时,执行和显示PR曲线大约需要12秒。我很想知道,如何提高绩效

代码:


经过的时间是12.700687秒。

当我读到这个问题时,我的观点是:在Matlab中,12秒内有1000个图像,非常快!:希望有人能帮忙。顺便说一句,要想知道什么需要更多的时间,你应该执行和计时你的代码,Matlab会告诉你什么需要更多的时间,而不需要将你的代码移植到MEX,这是你能得到的最快速度。。。特别是在12秒内检索1000幅图像。我见过的大多数未优化的图像检索机制都需要更长的时间。在这里想想你自己很幸运!
% Dir: parent directory location for images folder c1, c2, c3
% inputImage: \c1\1.ppm
% For example to get P-R curve execute: CBIR('D:\visionImages','\c2\1.ppm');
function [  ] = demoCBIR( Dir,inputImage)
% Dir='D:\visionImages';
% inputImage='\c3\1.ppm';
tic;
S=strcat(Dir,inputImage);
Inp1=imread(S);
num_red_bins = 8;
num_green_bins = 8;
num_blue_bins = 8;
num_bins = num_red_bins*num_green_bins*num_blue_bins;

A = imcolourhist(Inp1, num_red_bins, num_green_bins, num_blue_bins);%input image histogram
srcFiles = dir(strcat(Dir,'\*.jpg'));  
B = zeros(num_bins, 100); % hisogram of other 100 images in category 1
ptr=1;
for i = 1 : length(srcFiles)
    filename = strcat(Dir,'\',srcFiles(i).name);
    I = imread(filename);% filter image
    B(:,ptr) = imcolourhist(I, num_red_bins, num_green_bins, num_blue_bins); 
    ptr=ptr+1;                                                   
end

%normal histogram intersection
a = size(A,2); b = size(B,2); 
K = zeros(a, b);
for i = 1:a
  Va = repmat(A(:,i),1,b);
  K(i,:) = 0.5*sum(Va + B - abs(Va - B));
end


%PR curve creation
sims=K;
  for i=1: 100 % number of relevant images for dir 1
     relevant_IDs(i) = i;
  end

 num_relevant_images = numel(relevant_IDs);

 [sorted_sims, locs] = sort(sims, 'descend');
 locations_final = arrayfun(@(x) find(locs == x, 1), relevant_IDs);
 locations_sorted = sort(locations_final);
 precision = (1:num_relevant_images) ./ locations_sorted;
 recall = (1:num_relevant_images) / num_relevant_images;
 plot(recall, precision, 'b.-');
 xlabel('Recall');
 ylabel('Precision');
 title('Precision-Recall Graph');
 axis([0 1 0 1.05]); 
 grid;
 toc;
end