Race Code - PerformProcessingStage usage

These are the various stages of the PerformProcessingStage function available to Race.py.
Each stage is followed by an example of the output.

You can save images using the command SaveImage(image, title).
For example:

1
SaveImage(someImage, 'saved-photo')

will make a file called saved-photo.jpg in the /home/pi/formulapi/logs directory.
Be aware there are limits on how much data we will upload to the FTP after a race, it would be a bad idea to save lots of images each lap!

Grabbing the camera image (stage 0)

1
image = GetLatestImage()

Stage 1 - Get the minimums and maximums from an image

1
rMin, rMax, gMin, gMax, bMin, bMax = PerformProcessingStage(1, image)

Stage 2 - Crop the image

1
image = PerformProcessingStage(2, image)

Stage 3 - Auto brightness

1
image = PerformProcessingStage(3, image)

Stage 4 - Find black areas

1
black = PerformProcessingStage(4, image)

Stage 5 - Erode a channel to remove noise

1
black = PerformProcessingStage(5, black)

Stage 6 - Split the colour channels

1
red, green, blue = PerformProcessingStage(6, image)



Stage 7 - Auto level a channel

1
red = PerformProcessingStage(7, (red, rMin, rMax, Settings.redGain))

Stage 8 - Get the maximum channel for each pixel

1
maxImage = PerformProcessingStage(8, (red, green, blue))

Stage 9 - Exclude unwanted parts of each channel

1
red = PerformProcessingStage(9, (red, maxImage, black))


This would usually be followed by an erosion (stage 5)

1
red = PerformProcessingStage(5, red)

Stage 10 - Merge channels to a single image to make them easy to see

1
viewImage = PerformProcessingStage(10, (red, green, blue, black))


This is usually for viewing or logging benefit.
Typically image processing / analysis would work with the stage 9 images.

The full listing

Here is the whole sequence laid out in full, saving the results of each stage:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# Grab the image
image = GetLatestImage()
SaveImage(image, '00-raw')
 
# Get range levels for later
rMin, rMax, gMin, gMax, bMin, bMax = PerformProcessingStage(1, image)
print rMin, rMax, gMin, gMax, bMin, bMax
 
# Crop the image
image = PerformProcessingStage(2, image)
SaveImage(image, '02-cropped')
 
# Auto brightness
image = PerformProcessingStage(3, image)
SaveImage(image, '03-auto-bright')
 
# Find black areas
black = PerformProcessingStage(4, image)
SaveImage(black, '04-black-raw')
 
# Erode the black areas
black = PerformProcessingStage(5, black)
SaveImage(black, '05-black')
 
# Split the colours
red, green, blue = PerformProcessingStage(6, image)
SaveImage(red, '06-red-raw')
SaveImage(green, '06-green-raw')
SaveImage(blue, '06-blue-raw')
 
# Auto level channels
red = PerformProcessingStage(7, (red, rMin, rMax, Settings.redGain))
SaveImage(red, '07-red-leveled')
green = PerformProcessingStage(7, (green, gMin, gMax, Settings.greenGain))
SaveImage(green, '07-green-leveled')
blue = PerformProcessingStage(7, (blue, bMin, bMax, Settings.blueGain))
SaveImage(blue, '07-blue-leveled')
 
# Get the maximums
maxImage = PerformProcessingStage(8, (red, green, blue))
SaveImage(maxImage, '08-max')
 
# Exclude unwanted parts of each channel
red = PerformProcessingStage(9, (red, maxImage, black))
SaveImage(red, '09a-red-section')
green = PerformProcessingStage(9, (green, maxImage, black))
SaveImage(green, '09a-green-section')
blue = PerformProcessingStage(9, (blue, maxImage, black))
SaveImage(blue, '09a-blue-section')
 
# Erode the channels
red = PerformProcessingStage(5, red)
SaveImage(red, '09b-red')
green = PerformProcessingStage(5, green)
SaveImage(green, '09b-green')
blue = PerformProcessingStage(5, blue)
SaveImage(blue, '09b-blue')
 
# Merge channels to a single image to make them easy to see
viewImage = PerformProcessingStage(10, (red, green, blue, black))
SaveImage(viewImage, '10-final-view')

Add new comment

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Syntax highlight code surrounded by the <pre class="brush: lang">...</pre> tags, where lang is one of the following language brushes: bash, cpp, perl, python.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.