From 139365620334c2bfbbf1bd176777e3192c402617 Mon Sep 17 00:00:00 2001 From: aj Date: Fri, 8 Nov 2019 15:27:25 +0000 Subject: [PATCH] changing bin size --- .gitignore | 1 + cvpr_visualsearch.m~ | 156 ----------------------------------------- extractGlobalColHist.m | 32 +-------- scratch.m | 2 +- 4 files changed, 3 insertions(+), 188 deletions(-) delete mode 100644 cvpr_visualsearch.m~ diff --git a/.gitignore b/.gitignore index ebd9fcb..8093953 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ dataset descriptors +*~ diff --git a/cvpr_visualsearch.m~ b/cvpr_visualsearch.m~ deleted file mode 100644 index 24b7984..0000000 --- a/cvpr_visualsearch.m~ +++ /dev/null @@ -1,156 +0,0 @@ -%% EEE3032 - Computer Vision and Pattern Recognition (ee3.cvpr) -%% -%% cvpr_visualsearch.m -%% Skeleton code provided as part of the coursework assessment -%% -%% This code will load in all descriptors pre-computed (by the -%% function cvpr_computedescriptors) from the images in the MSRCv2 dataset. -%% -%% It will pick a descriptor at random and compare all other descriptors to -%% it - by calling cvpr_compare. In doing so it will rank the images by -%% similarity to the randomly picked descriptor. Note that initially the -%% function cvpr_compare returns a random number - you need to code it -%% so that it returns the Euclidean distance or some other distance metric -%% between the two descriptors it is passed. -%% -%% (c) John Collomosse 2010 (J.Collomosse@surrey.ac.uk) -%% Centre for Vision Speech and Signal Processing (CVSSP) -%% University of Surrey, United Kingdom - -close all; -clear all; - -%% Edit the following line to the folder you unzipped the MSRCv2 dataset to -DATASET_FOLDER = 'dataset'; - -%% Folder that holds the results... -DESCRIPTOR_FOLDER = 'descriptors'; -%% and within that folder, another folder to hold the descriptors -%% we are interested in working with -DESCRIPTOR_SUBFOLDER='globalRGBhisto'; - - -%% 1) Load all the descriptors into "ALLFEAT" -%% each row of ALLFEAT is a descriptor (is an image) - -ALLFEAT=[]; -ALLFILES=cell(1,0); -ALLCATs=[]; -ctr=1; -allfiles=dir (fullfile([DATASET_FOLDER,'/Images/*.bmp'])); -for filenum=1:length(allfiles) - fname=allfiles(filenum).name; - - %identify photo category for PR calculation - split_string = split(fname, '_'); - ALLCATs(filenum) = str2double(split_string(1)); - - imgfname_full=([DATASET_FOLDER,'/Images/',fname]); - img=double(imread(imgfname_full))./255; - thesefeat=[]; - featfile=[DESCRIPTOR_FOLDER,'/',DESCRIPTOR_SUBFOLDER,'/',fname(1:end-4),'.mat'];%replace .bmp with .mat - load(featfile,'F'); - ALLFILES{ctr}=imgfname_full; - ALLFEAT=[ALLFEAT ; F]; - ctr=ctr+1; -end - -% get counts for each category for PR calculation -CAT_HIST = histogram(ALLCATs).Values; - -%% 2) Pick an image at random to be the query -NIMG=size(ALLFEAT,1); % number of images in collection -queryimg=floor(rand()*NIMG); % index of a random image - - -%% 3) Compute the distance of image to the query -dst=[]; -for i=1:NIMG - candidate=ALLFEAT(i,:); - query=ALLFEAT(queryimg,:); - - category=ALLCATs(i); - - %% COMPARE FUNCTION - thedst=compareEuclidean(query,candidate); - dst=[dst ; [thedst i category]]; -end -dst=sortrows(dst,1); % sort the results - -%% 3.5) Calculate PR -precision_values=zeros([1, NIMG]); -recall_values=zeros([1, NIMG]); - -correct_at_n=zeros([1, NIMG]); - -query_row = dst(1,:); -query_category = query_row(1,3); -for i=1:NIMG - - rows = dst(1:i, :); - - correct_results = 0; - incorrect_results = 0; - - if i > 1 - for n=1:i - 1 - row = rows(n, :); - category = row(3); - - if category == query_category - correct_results = correct_results + 1; - else - incorrect_results = incorrect_results + 1; - end - - end - end - - % LAST ROW - row = rows(i, :); - category = row(3); - - if category == query_category - correct_results = correct_results + 1; - correct_at_n(i) = 1; - else - incorrect_results = incorrect_results + 1; - end - - precision = correct_results / i; - recall = correct_results / CAT_HIST(1,query_category); - - precision_values(i) = precision; - recall_values(i) = recall; -end - - -%% 3.6) calculate AP -for i = 1:NIMG - precision = precision_values(i); - i -end - - -%% 3.8) plot PR curve -% plot(recall_values, precision_values); -% title('PR Curve'); -% xlabel('Recall'); -% ylabel('Precision'); - - -%% 4) Visualise the results -%% These may be a little hard to see using imgshow -%% If you have access, try using imshow(outdisplay) or imagesc(outdisplay) - -SHOW=15; % Show top 15 results -dst=dst(1:SHOW,:); -outdisplay=[]; -for i=1:size(dst,1) - img=imread(ALLFILES{dst(i,2)}); - img=img(1:2:end,1:2:end,:); % make image a quarter size - img=img(1:81,:,:); % crop image to uniform size vertically (some MSVC images are different heights) - outdisplay=[outdisplay img]; -end -imgshow(outdisplay); -axis off; diff --git a/extractGlobalColHist.m b/extractGlobalColHist.m index ece113f..d629c52 100644 --- a/extractGlobalColHist.m +++ b/extractGlobalColHist.m @@ -1,42 +1,12 @@ function F=extractGlobalColHist(img) -divs = 15; +divs = 4; qimg = floor(img .* divs); bin = qimg(:,:,1) * divs^2 + qimg(:,:,2) * divs^1 + qimg(:,:,3); vals = reshape(bin, 1, size(bin, 1) * size(bin, 2)); -% dimensions = size(img); -% -% width = dimensions(2); -% height = dimensions(1); -% -% pixel_count = width * height; -% -% bin_values = zeros([1, pixel_count]); -% count = 1; -% for i = 1:length(img(:, 1, 1)) -% for j = 1:length(img(1, :, 1)) -% red = img(i, j, 1); -% green = img(i, j, 2); -% blue = img(i, j, 3); -% -% red_bin = floor(red*divs); -% green_bin = floor(green*divs); -% blue_bin = floor(blue*divs); -% -% bin_value = red_bin * (divs^2) + green_bin * (divs^1) + blue_bin; -% -% bin_values(count) = bin_value; -% -% count = count + 1; -% end -% end - -% hist_values = histogram(bin_values, (divs^3 - 1)).Values ./ pixel_count; -% hist_values = histogram(bin_values, divs^3, 'Normalization', 'probability').Values; - hist_values = histogram(vals, divs^3, 'Normalization', 'probability').Values; F=hist_values; diff --git a/scratch.m b/scratch.m index fa95ac1..1091b04 100644 --- a/scratch.m +++ b/scratch.m @@ -4,5 +4,5 @@ img = double(imread('dataset/Images/10_10_s.bmp'))./255; imshow(img); -glo = extractGlobalColHist(img) +glo = extractGlobalColHist(img); size(img); \ No newline at end of file