<< Chapter < Page | Chapter >> Page > |
For each snapshot taken from the video, the processing returns the coordinates of the drum stick position relative to the paper boundary.
Since we are only using a part of the screen (only the part of white paper). We need to calibrate a new coordinate system for our later position detection. Therefore, we first took a snapshot of the whole system to detect the edge of the paper and then chose a corner as the new origin.
To detect the edge of the paper, we used canny edge detector. To better understand the method, instead of using the MATLAB command, we implemented the method on our own.
Gradient calculations
% The filter that reduces noise
f = 1/159*[2 4 5 4 2;4 9 12 9 4;5 12 15 12 5;4 9 12 9 4;2 4 5 4 2];
n = imfilter(mg,f,'same');%Gradient Magnitude and Angle
%x direction partial derivativemg = double(mg);
Dx = [-1 0 1;-2 0 2;-1 0 1];
% y direction partial derivativeDy = [1 2 1;0 0 0;-1 -2 -1];% Compute the gradient magnitude and the angle of the gradient
n1 = imfilter(mg,Dx);n2 = imfilter(mg,Dy);
% initializations = [];theta = [];theta1= [];n1 = double(n1);
n2 = double(n2);for i = 1:size(m,1)for j = 1:size(m,1)
% calculate the gradient magnitudes(i,j) = sqrt((n1(i,j))^2+(n2(i,j))^2);
theta(i,j) = 360*(atan(n1(i,j)/n2(i,j)))/3.14;% round anglesif (22.5<theta(i,j)&&theta(i,j)<=67.5)
theta1(i,j) = 45;elseif (67.5<theta(i,j)&&theta(i,j)<=112.5)
theta1(i,j) = 90;elseif (112.5<theta(i,j)&&theta(i,j)<=157.5)
theta1(i,j) = 135;elseif (157.5<theta(i,j)&&theta(i,j)<=202.5)||(0<theta(i,j)&&...
theta(i,j)<=22.5)||(337.5<theta(i,j)&&theta(i,j)<=360)
theta1(i,j) = 0;elseif (202.5<theta(i,j)&&theta(i,j)<=247.5)
theta1(i,j) = 45;elseif (247.5<theta(i,j)&&theta(i,j)<=292.5)
theta1(i,j) = 90;else
theta1(i,j) = 135;end
endend
Notification Switch
Would you like to follow the 'Virtual drum kit' conversation and receive update notifications?