<< Chapter < Page Chapter >> Page >

Apporach 1

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

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Elec 301 projects fall 2011. OpenStax CNX. Jun 18, 2012 Download for free at http://cnx.org/content/col11431/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Elec 301 projects fall 2011' conversation and receive update notifications?

Ask