<< Chapter < Page | Chapter >> Page > |
function sign_detector_basic
color = [85 255 0]./255;
%%% READ IN WHICHEVER REFERENCES YOU WOULD LIKE TO USEstop_gen_ref_2 = double(imread('ref_stop.png'));
size_gen_ref = size(stop_gen_ref_2);%%% INPUT IMAGE TO BE DETECTED
file_image = strcat('speed_limit6.jpg');sign = double(imread(file_image));
size_sign = size(sign);%%% c is the ratio of the image edges. In order to avoid distorting our
%%% image we want this ratio to stay constant as we resize the imagec = size_sign(2)/size_sign(1);
%%% This logic determines which side is smaller. The first image:reference%%% ratio we try is 2:1 where the shortest side of the image is twice the
%%% size of the reference.n1 = (size_gen_ref(2)/size_sign(2));
n2 = size_gen_ref(1)/size_sign(1);n = max(n1, n2);
max_chart = [];
max_val_plot = 0;%%% This loop finds the correlation for image:ratio sizes of n through 1
for i = n:.01:1%Resize Imageyi = size_sign(1)*i;
xi = c*yi;sign_res = imresize(sign, [yi xi]);%Call finder to determine where the point of highest correlation is and%update the vector max_chart which stores the maximum value for each
%iteration[max_val, locx, locy] = finder(sign_res, stop_gen_ref_2);max_chart = [max_chart; i max_val];%If the new max value is higher, record the sign, location, and value%of the correlation for this ratio.
if max_val>max_val_plot
max_val_plot = max_val;locx_plot = locx;
locy_plot = locy;sign_plot = sign_res;endend%Plot a figure that shows how the correlation varies as the image:reference
%ratio variesfigure
plot(max_chart(:,1), max_chart(:,2), 'color', color, 'LineWidth', 5);sign_title = strcat('Correlation as Image:Reference Ratio Varies');
title(sign_title)axis([n, 1, 0 ,1])%Plot a figure that shows where the program finds the sign at the
%image:reference ratio that gives the maximum correlationfigure
imshow(uint8(sign_plot));hold on
plot(locy_plot, locx_plot, 'bx', 'MarkerSize', 100, 'LineWidth', 3)title(strcat(file_image,' ', num2str(locx),' , ', num2str(locy)));
end%This funciton determines the maximum value of correlation and location of
%this maximum value for an inputted imag and reference.function [max_val, locx, locy] = finder(stop_image, reference)%Find the sizes of the matrices
size_image = size(stop_image);size_ref = size(reference);
%Grab first two columnssize_image = size_image(1:2);
size_ref = size_ref(1:2);%Calculate amount for zero-padding
x = size_image + size_ref - [1 1];
correlation = zeros(x(1), x(2));for k = 1:3
%Grab values for one colorstop_image_t = stop_image(:,:,k);
reference_t = reference(:,:,k);%Calculate and add the correlations for each color
correlation_int = normxcorr2(reference_t, stop_image_t);correlation = correlation + correlation_int;
endcorrelation = correlation./3;
%Determine the max valuemax_val = max(max(correlation));
%The correlation matrix is not the same size of the image becuase the size%of a signal resulting from a convolution has a size equal to the sum of
%the sizes of the two images that were convolved. Hence, need to determine%which points in the matrix correlation refer to which points in the image.
[x,y]= size(correlation);
map_refined = correlation(ceil(size_ref(1)/2):x - ceil(size_ref(1)/2), ceil(size_ref(2)/2):y - ceil(size_ref(2)/2));%Find the points of maximum correlation
[locx, locy]= find(map_refined == max_val);
end
Notification Switch
Would you like to follow the 'Street sign detection with template matching and edge detection methods' conversation and receive update notifications?