This page is optimized for mobile devices, if you would prefer the desktop version just
click here
Image processing--calibration and canny edge detection
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.
Intro to canny edge detection
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.
Basic steps for canny edge detector
- Smooth with Gaussian Filter
- Compute Horizontal/Vertical Gradient
- Compute magnitude of gradient
- Non-Maximal Suppression
- Perform Hysteresis Threshold
We have our codes attached at the bottom.
The image we implemented canny edge detection
After canny edge detection
Boforehand
Before doing any image processing techniques on an image, we usually first smooth the image to get rid of most noise. To do this, we apply a Gaussian smoothing filter to the image.
Image gradient
An image gradient is a directional change in the intensity or color in an image. Edge detection utilized image gradient a lot since edges usually are places with discontinuity.
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
Non-maximum suppression
This method returns a single pixel width edge of the image. Basic algorithm is as follows: If pixel (x; y) has the highest gradient magnitude of the three pixels examined, it is kept as an edge. If one of the other two pixels has a higher gradient magnitude,then pixel (x; y) is not on the center of the edge and should not be classified as an edge pixel.In this way we could get a clear and thin edge of the image.Read also:
OpenStax, Virtual drum kit. OpenStax CNX. Dec 19, 2013 Download for free at http://cnx.org/content/col11607/1.1
Google Play and the Google Play logo are trademarks of Google Inc.