The App
The R source code of
The perfect circle
shiny app is available as part of the R package
perfectcircle
available from
github
under a GPLv3 license. Please posts comments and bugs as github
issues
.
More information about the algorithm as well as the manual of the app can be found as part of the R package
perfectcircle
, e.g., on the Wiki page. Furthermore, two video tutorials of the shiny app are described in the blog post
A Shiny app for your perfect circle
.
World Championship in Freehand Circle Drawing
Can you draw freehand circles like a World Champion? If yes, prove it by making a github pull request containing the files [Alias].jpg and [Alias].csv files to the
round-1
folder of the
worldfreehandcirclechampionship
github project.
Using the Shiny App
Image:
Select a rectified .jpg image of your circle using the file selector of the shiny app. Your image should be
rectified
- that means parallel lines should appear as parallel lines and 90 degree angles should display as 90 degree angles in the image. Such a picture can for example be obtained by placing the camera on a pod a few meters away from the center of your drawing canvas and on the line of an orthogonal vector from this center. Also ensure a constant lighting without reflections. Best results are obtained if there is a large contrast between circle and background, e.g., white chalk on a clean blackboard or black edding on a whiteboard. Note: The more pixels the uploaded contains the longer the computations take. It can thus be a good idea to use the
scale factor
slider to reduce the resolution in order to speed up the computations. Warning: Results for an image may vary slightly based on the selected scale factor. If one wants to compare the score of several different circles one should compare the scores at the same scaling.
Seed Points:
For the image the coordinates of at least two background and at least one foreground points have to be specified: For the background points at least one has to be placed inside the circle and at least one outside the circle. The seedpoints are specified in the 'Seed points' tab bei either clicking in the image (choosing the appropriate 'click action') or by uploading a .csv file with columns 'x', 'y' and 'type' (where type is either: foreground or background). The later allows the user to find the coordinates using her favorite image analysis program, e.g., Gimp or MS paint or directly in R using the 'locator' function. An example of such a .csv file is:
x,y,type
1304,1368,background
232,416,background
304,1304,foreground
2384,1304,foreground
It is possible to download the current selection of seed points as a .csv file (select: 'Download') in order to speed up the process a second time or to batch process an entire stack of images directly in R. Note: Displaying the image might take a little while, if the resolution is high. It can be beneficial to use a scale factor of 25% or lower in the main tab, because the image displayed is shown using the scale factor also and, hence, is faster.
Result:
Once you uploaded the two files and selected the scale factor you have to hit the 'Go!' button to start the computation. This will compute the circularity score by comparing with the perfect circle. The reported score is the
(1-ratio_areadifference)*100%
score described in
Judging Freehand Circle Drawing Competitions
. Details of the resulting fit are shown in the 'Fit Details' panel. This shows for example how the extraction of the circle from the background worked and if, possibly, more foreground or background seed points are needed to get better results. It is possible to change just the seed points and hit 'Go!' in order to improve the detection sequentially.