<< Chapter < Page Chapter >> Page >

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

The edge of the pater has been detected fairly accurately.

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&lt;theta(i,j)&amp;&amp;theta(i,j)&lt;=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.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  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.

Notification Switch

Would you like to follow the 'Virtual drum kit' conversation and receive update notifications?

Ask