Anaglyph Tutorial
-
Upload
krishna-vijay -
Category
Documents
-
view
75 -
download
2
Transcript of Anaglyph Tutorial
![Page 1: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/1.jpg)
and(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa
| Ajusal Sugathan & Utkarsh Sinha
![Page 2: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/2.jpg)
presents(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa
| Ajusal Sugathan & Utkarsh Sinha
![Page 3: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/3.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 4: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/4.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 5: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/5.jpg)
The word robot originally was supposed to mean a slave
It is a machine which performs a variety of tasks, either using manual external
control or intelligent automation
A manually controlled car or a ASIMOV trying to kick a football are all robots
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 6: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/6.jpg)
Robotics is a multi disciplinary field of engineering encompassing the vistas of› Mechanical design
› Electronic control
› Artificial Intelligence
It finds it‘s uses in all aspects of our life› automated vacuum cleaner
› Exploring the ‗Red‘ planet
› Setting up a human colony there :D
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 7: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/7.jpg)
ROBOTS
CONTROL
AUTONOMOUS
MANUAL
APPLICATIONS
INDUSTRIAL
MEDICAL
INTERFACE
HARDWARE
SOFTWARE
INTERLINKED
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 8: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/8.jpg)
Locomotion System
Actuators
Power Supply System
Transmission System
Switches
Sensory Devices For Feedback
Sensor Data Processing Unit
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 9: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/9.jpg)
A mobile robot must have a system to make it move. Ob.
This system gives our machine the ability to move forward, backward and take turns
It may also provide for climbing up and down
Or even flying or floating
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 10: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/10.jpg)
Each type of locomotion requires different number of degrees of freedom
More degrees of freedom means more the number of actuators you will have to use
Although one actuator can be used to control more than one degree of freedom
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 11: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/11.jpg)
Wheeled
Legged
Climbing
Flying
Floating
Snake-Like
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 12: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/12.jpg)
The kind of locomotion most frequently used in robotics at the undergrad level
This involves conversion of electrical energy into mechanical energy (mostly using motors)
The issue is to control these motors to give the required speed and torque
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 13: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/13.jpg)
We have a simple equation for the constant power delivered to the motor:
› P = ζ X ω
Note that the torque and angular velocity are inversely proportionally to each other
So to increase the speed we have to reduce the torque
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 14: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/14.jpg)
The dc motors available have very high speed of rotation which is generally not needed
At high speeds, they lack torque
For reduction in speed and increase in ―pulling capacity‖ we use pulley or gear systems
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 15: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/15.jpg)
Differential Drive
Dual Differential Drive
Car-type Drive
Skid-steer Drive
Synchronous Drive
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 16: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/16.jpg)
Simplest, easiest to implement and most widely used.
It has a free moving wheel in the front accompanied with a left and right wheel. The two wheels are separately powered
When the wheels move in the same direction the machine moves in that direction.
Turning is achieved by making the wheels oppose each other‘s motion, thus generating a couple
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 17: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/17.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 18: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/18.jpg)
In-place (zero turning radius) rotation is done by turning the drive wheels at the same rate in the opposite direction
Arbitrary motion paths can be implemented by dynamically modifying the angular velocity and/or direction of the drive wheels
Total of two motors are required, both of them are responsible for translation and rotational motion
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 19: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/19.jpg)
Simplicity and ease of use makes it the most preferred system by beginners
Independent drives makes it difficult for straight line motion. The differences in motors and frictional profile of the two wheels cause them to move with slight turning effect
The above drawback must be countered with appropriate feedback system. Suitable for human controlled remote robots
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 20: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/20.jpg)
Uses synchronous rotation of its wheels to achieve motion & turns
It is made up of a system of 2 motors. One which drive the wheels and the other turns the wheels in a synchronous fashion
The two can be directly mechanically coupled as they always move in the same direction with same speed
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 21: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/21.jpg)
The direction of motion is given by black arrow. The alignment of the machine is shown by red arrow
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 22: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/22.jpg)
The use of separate motors for translation and wheel turning guarantees straight line motion without the need for dynamic feedback control
This system is somewhat complex in designing but further use is much simpler
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 23: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/23.jpg)
Actuators, also known as drives, are mechanisms for getting robots to move.
Most actuators are powered by pneumatics (air pressure), hydraulics (fluid pressure), or motors (electric current).
They are devices which transform an input signal (mainly an electrical signal)) into motion
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 24: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/24.jpg)
Widely used because of their
small size and high energy output.
Operating voltage: usually 6,12,24V.
Speed: 1-20,000 rpm..
Power: P = ζ X ω
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 25: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/25.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
The stator is the stationary outside part of a motor. The rotor is the inner part which rotates. Red represents a magnet or winding with a north polarization. Green represents a magnet or winding with a south polarization. Opposite, red and green, polarities attract. Commutator contacts are brown and the brushes are dark grey.
![Page 26: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/26.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Stator is composed of two or more permanent magnet pole pieces.
Rotor composed of windings which are connected to a mechanical commutator.
The opposite polarities of the energized winding and the stator magnet attract and the rotor will rotate until it is aligned with the stator.
Just as the rotor reaches alignment, the brushes move across the commutator contacts and energize the next winding.
A yellow spark shows when the brushes switch to the next winding.
![Page 27: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/27.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
It is an electric motor that can divide a full rotation into a large number of steps. The motor's position can be controlled precisely, without any feedback mechanism. There are three types:
Permanent Magnet Variable Resistance Hybrid type
![Page 28: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/28.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Stepper motors work in a similar way to dc motors, but where dc motors have 1 electromagnetic coil to produce movement, stepper motors contain many.
Stepper motors are controlled by turning each coil on and off in a sequence.
Every time a new coil is energized, the motor rotates a few degrees, called the step angle.
![Page 29: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/29.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 30: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/30.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Full Step Stepper motors have 200 rotor teeth, or 200 full steps per revolution of the motor shaft. Dividing the 200 steps into the 360º's rotation equals a 1.8º full step angle. Achieved by energizing both windings while reversing the current alternately.
![Page 31: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/31.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Servos operate on the principle of negative feedback, where the control input is compared to the actual position of the mechanical system as measured.
Any difference between the actual and wanted values (an "error signal") is amplified and used to drive the system in the direction necessary to reduce or eliminate the error
Their precision movement makes them ideal for powering legs, controlling rack and pinion steering, to move a sensor around etc.
![Page 32: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/32.jpg)
Suitable power source is needed to run the robots
Mobile robots are most suitably powered by batteries
The weight and energy capacity of the batteries may become the determinative factor of its performance
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 33: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/33.jpg)
For a manually controlled robot, you can use batteries or voltage eliminators (convert the normal 220V supply to the required DC voltage 12V , 24V etc.)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 34: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/34.jpg)
Gear
Belt Pulley
Chain Sprocket
Rack and Pinion
Pick Place Mechanisms
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 35: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/35.jpg)
Gears are the most common means of transmitting power in mechanical engineering
Gears form vital elements of mechanisms in many machines such as vehicles, metal tooling machine tools, rolling mills, hoisting etc.
In robotics its vital to control actuator speeds and in exercising different degrees of freedom
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 36: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/36.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 37: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/37.jpg)
To achieve torque magnification and speed reduction
They are analogous to transformers in electrical systems
It follows the basic equation:
ω1 x r1 = ω2 x r2
Gears are very useful in transferring motion between different dimension
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 38: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/38.jpg)
An arrangement of gears to convert rotational torque to linear motion
Same mechanism used to steer wheels using a steering
In robotics used extensively in clamping systems
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 39: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/39.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 40: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/40.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 41: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/41.jpg)
It allows for mechanical power, torque, and speed to be transmitted across axes
If the pulleys are of differing diameters, it gives a mechanical advantage
In robotics it can be used in lifting loads or speed reduction
Also it can be used in a differential drive to interconnect wheels
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 42: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/42.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 43: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/43.jpg)
Sprocket is a profiled wheel with teeth that meshes with a chain
It is similar to the system found in bicycles
It can transfer rotary motion between shafts in cases where gears are unsuitable
Can be used over a larger distance
Compared to pulleys has lesser slippage due to firm meshing between the chain and sprocket
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 44: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/44.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 45: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/45.jpg)
For picking and placing many mechanisms can be used:
Hook and pick
Clamp and pick
Slide a sheet below and pick
Many other ways
Lots of Scope for innovation
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 46: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/46.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 47: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/47.jpg)
Image Processing is a tool for analyzing image data in all areas of natural science
It is concerned with extracting data from real-world images
Differences from computer graphics is that computer graphics makes extensive use of primitives like lines, triangles & points. However no such primitives exist in a real world images.
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 48: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/48.jpg)
Increasing need to replicate human sensory organs
Eye (Vision) : The most useful and complex sensory organ
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 49: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/49.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 50: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/50.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 51: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/51.jpg)
Automated visual inspection system Checking of objects for defects visually
Remote Sensing
Satellite Image Processing
Classification (OCR), identification (Handwriting, finger prints) etc.
Detection and Recognition systems (Facial recognition..etc)
Biomedical applications
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 52: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/52.jpg)
Camera, Scanner or any other image acquisition device
PC or Workstation or Digital Signal Processor for processing
Software to run on the hardware platform (Matlab, Open CV etc.)
Image representation to process the image (usually matrix) and provide spatial relationship
A particular color space is used to represent the image(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 53: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/53.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Image Acquisition Device
(Eg. CCD or CMOS Camera)
Image Processor
(Eg. PC or DSP)
Image Analysis Tool
(Eg. Matlab or Open CV)
Machine Control Of Hardware through serial or parallel interfacing
![Page 54: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/54.jpg)
Using a camera
Analog cameras
Digital cameras› CCD and CMOS cameras
Captures data from a single
light receptor at a time
CCD – Charge Coupled Devices
CMOS – Complementary MOSFET Sensor based
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 55: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/55.jpg)
Digital Cameras› CCD Cameras
High quality, low noise images
Genarates analog signal converted using ADC
Consumes high power
› CMOS Cameras
Lesser sensitivity
Poor image quality
Lesser power
Analogue cameras require grabbing card or TV tuner card to interface with a PC
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 56: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/56.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Colored pixels on CCD Chip
![Page 57: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/57.jpg)
Matlab
Open CV
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 58: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/58.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 59: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/59.jpg)
Two types: Vector and Raster
Vector images store curve information
Example: India‘s flag
Three rectangles, one circle and the spokes
We will not deal with vector images at all
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 60: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/60.jpg)
Raster images are different
They are made up of several dots
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 61: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/61.jpg)
If you think about it, your laptop‘s display is a raster display
Also, vector images are high level abstractions
Vector representations are more complex and used for specific purposes
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 62: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/62.jpg)
Raster› Matrix
Vector› Quadtrees
› Chains
› Pyramid
Of the four, matrix is the most general. The other three are used for special purposes. All these representations must provide for spatial relationships
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 63: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/63.jpg)
Computers cannot handle continuous images but only arrays of digital numbers
So images are represented as 2-D arrays of points (2-D matrix)(Raster Represenatation)
A point on this 2-D grid (corresponding to the image matrix element) is calledPIXEL (picture element)
It represents the average irradiance over the area of the pixel
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 64: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/64.jpg)
Each pixel requires some memory
Color depth : Amount of memory each pixel requires
Examples
› 1-bit
› 8-bit
› 32-bit
› 64-bit
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 65: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/65.jpg)
Pixels are tiny little dots of color you see on your screen, and the smallest possible size any image can get
When an image is stored, the image file contains information on every single pixel in that image i.e› Pixel Location› Intensity
The number of pixels used to represent the image digitally is called Resolution
More the number of pixels used, higher the resolution
Higher resolution requires more processing power
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 66: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/66.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 67: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/67.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 68: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/68.jpg)
MATLAB stands for MATrix LABoratory, a software developed by MathworksInc (www.mathworks.com). MATLAB provides extensive library support for various domains of scientific and engineering computations and simulations
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 69: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/69.jpg)
When you click the MATLAB icon (from your desktop or Start>All Programs), you typically see three windows: Command Window, Workspace and Command History. Snapshots of these windows are shown below
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 70: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/70.jpg)
This window shows the variables defined by you in current session on MATLAB
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 71: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/71.jpg)
Command History stores the list of recently used commands for quick reference
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 72: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/72.jpg)
This is where you run your code
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 73: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/73.jpg)
This is where you run your code
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 74: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/74.jpg)
In MATLAB, variables are stored as matrices (singular: matrix), which could be either an integer, real numbers or even complex numbers
These matrices bear some resemblance to array data structures (used in computer programming)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 75: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/75.jpg)
Let us start with writing simple instructions on MATLAB command window
To define an integer,
Type a=4 and hit enter
>>a=4
To avoid seeing the variable, add a semicolon after the instruction
>>a=4;
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 76: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/76.jpg)
Similarly to define a 2x2 matrix, the instruction in MATLAB is written as
>> b=[ 1 2; 3 4];
If you are familiar with operations on matrix, you can find the determinant or the inverse of the matrix.
>> determin= det(b)
>> d=inv(b)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 77: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/77.jpg)
Images as we have already seen are stored as matrices
So now we try to see this for real on MATLAB
We shall also look into the basic commands provided by MATLAB‘s Image Processing Toolbox
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 78: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/78.jpg)
Once you have started MATLAB, type the following in the Command Window
>> im=imread(‗sample.jpg');
This command stores the file image file ‗sample.jpg‘ in a variable called ‗im‘
It takes this file from the Current-Directory specified
Else, entire path of file should be mentioned
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 79: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/79.jpg)
You can display the image in another window by using imshow command
>>figure,imshow(im);
This pops up another window (called as figure window), and displays the image ‗im’
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 80: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/80.jpg)
The ‗imview‘ command can also be used in order toview the image
imview(im);
Difference is that in this case you can see specific pixel values just by moving the cursor over the image
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 81: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/81.jpg)
To know the breadth and height of the image, use the size function,
>>s=size(im);
The size function basically gives the size of any array in MATLAB
Here we get the size of the IMAGE ARRAY
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 82: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/82.jpg)
Now that we have our image stored in a variable we can observe and understand the following:
How pixels are stored?
What does the values given by each pixel indicate?
What is Image Resolution?
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 83: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/83.jpg)
Have a look at the values stored
Say the first block of 10 x 10
>>im(1:10,1:10);
Or Say view the pixel range 50:150 on both axis
>> figure,imshow(im(50:150,50:150));
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 84: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/84.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 85: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/85.jpg)
1-bit = BLACK or WHITE
8-bit = 28 different shades
24-bit = 224 different shades
64-bit images – High end displays
Used in HDRI, storing extra information per pixel, etc
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 86: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/86.jpg)
This is another name for 1-bit images
Each pixel is either White or Black
Technically, this is a black & white image
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 87: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/87.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 88: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/88.jpg)
Another name for 8-bit images
Each pixel can be one of 256 different shades of gray
These images are popularly called Black & White. Though, this is technically wrong.
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 89: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/89.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 90: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/90.jpg)
Again, each pixel gets 8 bits
But each of the 256 values maps to a color in a predefined ―palette‖
If required, you can have different bit depths
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 91: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/91.jpg)
We won‘t be dealing with indexed images
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 92: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/92.jpg)
8-bits is too less for all the different shades of colors we see
So 24-bits is generally used for color images
Thus each pixel can have one of 224
unique colors
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 93: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/93.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 94: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/94.jpg)
Now, a new problem arises:
How do you manage so many different shades?
Programmers would go nuts
Then came along the idea of color spaces
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 95: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/95.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 96: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/96.jpg)
A color space can be thought of as a way to manage millions of colors
Eliminates memorization, and increases predictability
Common color spaces:
› RGB
› HSV
› YCrCb or YUV
› YIQ
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 97: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/97.jpg)
You‘ve probably used this already
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 98: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/98.jpg)
Each pixel stores 3 bytes of data
The 24-bits are divided into three 8-bit values
The three are: Red, Green and Blue i.ethe primary colours
Mixing of primary colours in right proportions gives any particular colour
Each pixel has these 3 values
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 99: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/99.jpg)
1 byte = 8 bits can store a value between 0-255
We get pixel data in the form RGB values with each varying from 0-255
That is how displays work
So there are 3 grayscale channels
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 100: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/100.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 101: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/101.jpg)
Advantages:
› Intuitive
› Very widely used
Disadvantages:
› Image processing is relatively tough
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 102: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/102.jpg)
HSV makes image processing easier
Again, 24 bits = three 8-bit values or 3 channels
The 3 channels are: › Hue
› Saturation (Shade of Colour)
› Value (Intensity)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 103: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/103.jpg)
The Hue is the tint of color used› It represents the colour of the pixel (Eg. Red
Green Yellow etc)
The Saturation is the ―amount‖ of that tint› It represents the intensity of the colour (Eg.
Dark red and light red)
The Value is the ―intensity‖ of that pixel› It represents the intensity of brightness of the
colour
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 104: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/104.jpg)
RGB image converted to HSV
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
RGB
HUE
SATURATION
VALUE
![Page 105: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/105.jpg)
Advantages:
› The color at a pixel depends on a single value
› Illumination independent
Disadvantages:
› Something
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 106: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/106.jpg)
Intuitively RGB might seem to be the simpler and better colour space to deal with
Though HSV has its own advantages especially in colour thresholding
As the colour at each pixel depends on a single hue value it is very useful in separating out blobs of specific colours even when there are huge light variations
Thus it is very useful in processing real images taken from camera as there is a large amount of intensity variation in this case
Hence, ideal for robotics applications
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 107: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/107.jpg)
Widely used in digital video Has three 8-bit channels:
› Y Component: Gives luminance or intensity
› Cr Component: It is the RED component minus a reference value
› Cb Component: It is the BLUE component minus a reference
value
Hence Cr and Cb components represent the colour called ―Color Difference Components‖
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 108: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/108.jpg)
Advantages:
› Used in video processing
› Gives you a 2-D colour space hence helps in closer distinguishing of colours
Disadvantages:
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 109: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/109.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 110: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/110.jpg)
The camera returns images in a certain color space
You might want to convert to different color spaces to process it
Colour space conversions can take place between RGB to any other colourspace and vice versa
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 111: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/111.jpg)
Since cameras usually input images in rgb
We would like to convert these images into HSV or YCrCb
Conversions:
› RGB->HSV
› HSV->RGB
› RGB->YCrCb
› YCrCb->RGB
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 112: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/112.jpg)
RGB -> HSV
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 113: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/113.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
HSV RGB YCrCb
![Page 114: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/114.jpg)
>>h = rgb2hsv(im)
This converts the RGB image to HSV
The new colour space components can be seen using
>> imview(h)
>> imview(h(:,:,1)) ―—HUE—‖
>> imview(h(:,:,2)) ―—Saturation—‖
>> imview(h(:,:,3)) ―—Value—‖(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 115: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/115.jpg)
>>R = hsv2rgb(im)
This converts the HSV image to RGB
The new colour space components can be seen using
>> imview(R)
>> imview(R(:,:,1)) ―—Red—‖
>> imview(R(:,:,2)) ―—Green—‖
>> imview(R(:,:,3)) ―—Blue—‖
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 116: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/116.jpg)
>> Y = rgb2ycbcr(im);
This converts the RGB image to YCbCr
The new colour space components can be seen using
>> imview(Y)
>> imview(Y(:,:,1)) ―—Luminance—‖
>> imview(Y(:,:,2)) ―—Differenced Blue—‖
>> imview(Y(:,:,3)) ―—Differenced Red—‖
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 117: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/117.jpg)
>> R = ycbcr2rgb(im);
This converts the YCbCr image to RGB
The new colour space components can be seen using
>> imview(R)
>> imview(R(:,:,1)) ―—Red—‖
>> imview(R(:,:,2)) ―—Green—‖
>> imview(R(:,:,3)) ―—Blue—‖
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 118: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/118.jpg)
Formulae for conversion are very complex
But the best thing is, you don‘t need to remember these formulae
Matlab and OpenCV have built-in functions for these transformations :-)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 119: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/119.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 120: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/120.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 121: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/121.jpg)
OpenCV is a collection of many functions that help in image processing
You can use OpenCV in C/C++, .netlanguages, Java, Python, etc as well
We will only discuss OpenCV in C/C++
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 122: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/122.jpg)
It is blazingly fast
Quite simple to use and learn
Has functions for machine learning, image processing, and GUI creation
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 123: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/123.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 124: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/124.jpg)
Download the latest OpenCV package from
http://sourceforge.net/projects/opencv/
Install the package, and note where you installed it (like C:\Program Files\OpenCV\)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 125: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/125.jpg)
Now, we need to tell Microsoft Visual Studio that we‘ve installed OpenCV
So, we tell it where to find the OpenCV header files
Start Microsoft Visual Studio 2008
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 126: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/126.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 127: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/127.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
1
2
![Page 128: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/128.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Type these paths into the list
![Page 129: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/129.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Type these paths into the list
![Page 130: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/130.jpg)
Right now, Visual Studio knows where to find the OpenCV include files and library files
Now we create a new project
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 131: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/131.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 132: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/132.jpg)
Accept all default settings in the project
You‘ll end up with an empty project with a single file (like Mybot.cpp)
Open this file, we‘ll write some code now
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 133: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/133.jpg)
Add the following at the top of the code
#include <cv.h>
#include <highgui.h>
This piece of code includes necessary OpenCV functionality
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 134: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/134.jpg)
Now, we get to the main() function
int main()
{
The main function is where for program execution begins
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 135: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/135.jpg)
Next, we load an image
IplImage* img = cvLoadImage("C:\\hello.jpg");
The IplImage is a data type, like int, char, etc
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 136: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/136.jpg)
Comes built-into OpenCV
Any image in OpenCV is stored as an IplImage thingy
It is a ―structure‖
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 137: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/137.jpg)
Opens filename and returns it as an IplImage structure
Supported formats:› Windows bitmaps - BMP, DIB› JPEG files - JPEG, JPG, JPE› Portable Network Graphics - PNG› Portable image format - PBM, PGM, PPM› Sun rasters - SR, RAS› TIFF files - TIFF, TIF› OpenEXR HDR images - EXR› JPEG 2000 images - jp2
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 138: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/138.jpg)
Now we show this image in a window
cvNamedWindow("myfirstwindow");
cvShowImage("myfirstwindow", img);
This uses some HighGUI functions (comes along with OpenCV)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 139: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/139.jpg)
Creates a window with the caption title
This is a HighGUI function
You can add controls to each window as well (track bars, buttons, etc)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 140: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/140.jpg)
Shows img in the window with caption title
If no such window exists, nothing happens
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 141: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/141.jpg)
Finally, we wait for an input, release and exit
cvWaitKey(0);
cvReleaseImage(&img);
return 0;
}
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 142: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/142.jpg)
Waits for time milliseconds, and returns whatever key is pressed
If time=0, waits till eternity
Here, we‘ve used it to keep the windows from vanishing immediately
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 143: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/143.jpg)
Erases img from the RAM
Get rid of an image as soon as possible. RAM is precious
Note that you send the address of the image (&img) and not just the image (img)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 144: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/144.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 145: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/145.jpg)
Right now, Visual Studio knows where OpenCV is
But it does not know, whether to use OpenCV or not
We need to tell this explicitly
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 146: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/146.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 147: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/147.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 148: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/148.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 149: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/149.jpg)
Got errors?
› Check if the syntax is correct
› Copy all DLL files in *\OpenCV\bin\ into C:\Windows\System32
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 150: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/150.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 151: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/151.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 152: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/152.jpg)
src is the original image
dst is the destination
code is one of the follow:
› CV_BGR2HSV
› CV_RGB2HSV
› CV_RGB2YCrCb
› CV_HSV2RGB
› CV_<src_space>2<dst_space>
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 153: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/153.jpg)
src should be a valid image. Or an error will pop up
dst should be a valid image, i.e. you need a blank image of the same size
code should be valid (check the OpenCV documentation for that)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 154: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/154.jpg)
Allocates memory for an image of size size, with bits bits/pixel and channumber of channels
Used for creating a blank image
Use cvSize(width, height) to specify the size
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 155: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/155.jpg)
Example:
› IplImage* blankImg = cvCreateImage(cvSize(640, 480), 8, 3);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 156: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/156.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 157: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/157.jpg)
Wired
› Motor Driving module
› Interface with PC (Parallel/Serial)
Wireless
› The Motor-driving module
› The Wireless Receiver Circuit
› The Wireless Transmitter Circuit
› Interface with PC (Parallel/Serial)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 158: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/158.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 159: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/159.jpg)
IC 7805 Voltage Regulator
L293D Motor Driver
MCT2E Opto-Coupler
Parallel Port Male-Connector
RF-RX Connector
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 160: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/160.jpg)
It‘s a three terminal linear 5 volt regulator used to supply the board and other peripherals
Prescribed input voltage to this component is about 7-9 Volts
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 161: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/161.jpg)
Voltage fluctuations can be controlled by using low pass filter capacitors across output and input
Higher input voltage can be applied if heatsink is provided
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 162: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/162.jpg)
Used to control Dc and Stepper Motors Uses a H-Bridge which is an electronic
switching circuit that can reverse direction of current
It‘s a Dual-H bridge Basically used to convert a low voltage input
into a high voltage output to drive the motor or any other component
Eg: Microcontroller Motor DriverMotor
(5 Volts) (12 Volts)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 163: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/163.jpg)
Different Motor Driver ICs› L293D 600mA Current Rating Dual H-bridge (Dc and Stepper Motors)
› L298N 1 Amp Current Rating Dual H-bridge (Dc and Stepper Motors)
› L297-L298 (Coupled) For stepper motor overdriving Dual H-bridge (Dc and Stepper Motors) 2 Ics in parallel
› ULN2003/ULN2803 500mA Current Rating For unipolar stepper motors
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 164: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/164.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 165: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/165.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 166: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/166.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 167: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/167.jpg)
Output Current:
› 600 mA
Output Voltage
› Wide Range
› 4.5 V – 36 V
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 168: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/168.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 169: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/169.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
There are many situations where signals and data need to be transferred from one subsystem to another within a piece of electronics
Relays are too bulky as they are electromechanical in nature and at the same time give lesser efficiency
In these cases an electronic component called Optocoupler is used
![Page 170: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/170.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
They are generally used when the 2 subsystems are at largely different voltages
These use a beam of light to transmit the signals or data across an electrical barrier, and achieve excellent isolation
![Page 171: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/171.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
In our circuit, Opto-isolator (MCT2E) is used to ensure electrical isolation between motors and the PC parallel port during wired connection
The Viz-Board has four such chips to isolate the four data lines (pin 2, pin 3, pin 4, pin 5) coming out of the parallel port
![Page 172: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/172.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 173: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/173.jpg)
Along with the Viz-Board 2 extensions have been provided i.e
› The Rf Transmitter Module
› The Rf Reciever Module
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Transmitter
Receiver
![Page 174: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/174.jpg)
Radio frequency modules are used for data transmission wirelessly at a certain frequency
It sends and receives radio waves of a particular frequency and a decoder and encoder IC is provided to encode and decode this information
Wireless transmission takes place at a particular frequency Eg. 315Mhz
Theses modules might be single or dual frequency
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 175: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/175.jpg)
Antenna is recommended on both of them - just connect any piece of 23 cm long to the Antenna pin
The kit has a dual frequency RF module with frequencies 315/434 Mhz
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 176: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/176.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 177: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/177.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 178: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/178.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 179: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/179.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 180: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/180.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 181: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/181.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 182: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/182.jpg)
The encoder IC encodes the parallel port data and sends it to the RF transmitter module for wireless transmission
They are capable of encoding information which consists of N address bits and (12-N) data bits
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 183: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/183.jpg)
The HT12E Encoder IC has 8 address bits and 4 data bits
A DIP-Switch can be used to set or unset the address bits A0-A7
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 184: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/184.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
A0-A7—Address Bits
AD8-AD11—Data Bits
![Page 185: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/185.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
A0-A7—Address Bits
AD8-AD11—Data Bits
![Page 186: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/186.jpg)
The decoder IC decodes the RF transmitter data and sends it to the parallel port for wireless transmission
They are capable of encoding information which consists of N address bits and (12-N) data bits
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 187: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/187.jpg)
The HT12D Decoder IC has 8 address bits and 4 data bits
A DIP-Switch can be used to set or unset the address bits A0-A7
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 188: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/188.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
A0-A7—Address Bits
D8-D11—Data Bits
![Page 189: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/189.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
A0-A7—Address Bits
D8-D11—Data Bits
![Page 190: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/190.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 191: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/191.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 192: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/192.jpg)
Serial Port
Parallel Port
USB
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 193: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/193.jpg)
Data is transferred serially i.e packets are sent one after the other through a single port
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 194: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/194.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 195: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/195.jpg)
Data is transferred in parallel through different data pins at the same time
Communication is pretty fast
Found in old printer ports
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 196: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/196.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 197: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/197.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
25th pin : Ground2nd-12th pin : I/O lines
![Page 198: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/198.jpg)
Parallel port is faster than serial
A mass of data can be transmitted at the same time through parallel ports
Though parallel and serial ports are not found these days in laptops
Desktops and old laptops have these ports
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 199: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/199.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Direct Output from parallel port
Output from motor driver
![Page 200: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/200.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 201: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/201.jpg)
Camera, object and source positions
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 202: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/202.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Image samplingand quantization
![Page 203: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/203.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Continuous image projected
on an array sensor
Result of image samplingand quantization
![Page 204: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/204.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Sampling:Digitizing the coordinate values(spatial resolution)
Quantization:Digitizing the amplitude values(intensity levels)
![Page 205: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/205.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
• 1 bit /pixel
• B bits/pixel
–2B gray levels
–1 byte = 8 bits –> 256 levels
–2 possible values
–2 gray levels -> 0 or 1 (binary image)
![Page 206: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/206.jpg)
All this sampling and quantization puts in extra noise on the image!
Noise can be reduced by
› Using hardware
› Using software: filters
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 207: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/207.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 208: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/208.jpg)
Why do we need to enhance images?
Why filter images?
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 209: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/209.jpg)
Large amounts of external disturbances in real images
Due to different factors like changing lighting and other real-time effects
To improve quality of a captured image to make it easier to process the image
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 210: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/210.jpg)
First step in most IP applications
Used to remove noise in the input image
To remove motion blur from an image
Enhancing the edges of an image to make it appear sharper
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 211: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/211.jpg)
Generally used types Of Filtering
› Averaging Filter
› Mean Filter
› Median Filter
› Gaussian Smoothing
› Histogram Equalization
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 212: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/212.jpg)
The Averaging filter is used to sharpen the images by taking average over a number of images
It eliminates noise by assuming that different snaps of the same image have different noise patterns
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 213: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/213.jpg)
Noise is gaussian in nature i.e follows a gaussian curve
Hence, summing up noises infinite times approaches zero
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 214: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/214.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 215: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/215.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 216: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/216.jpg)
This is extremely useful for satellites that take intergalactic photographs
The images are extremely faint, and there is more noise than the image itself
Millions of pictures are taken, and averaged to get a clear picture
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 217: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/217.jpg)
The Mean is used to soften an image by averaging surrounding pixel values
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Center pixel = (22+77+48+150+77+158+0+77+219)/9
![Page 218: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/218.jpg)
The center pixel would be changed from 77 to 92 as that is the mean value of all surrounding pixels
This filter is often used to smooth images prior to processing
It can be used to reduce pixel flicker due to overhead fluorescent lights
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 219: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/219.jpg)
This replaces each pixel value by the median of its neighbors, i.e. the value such that 50% of the values in the neighborhood are above, and 50% are below
This can be difficult and costly to implement due to the need for sorting of the values
However, this method is generally very good at preserving edges
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 220: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/220.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 221: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/221.jpg)
Its performance is particularly good for removing short noise
The median is calculated by first sorting all the pixel values from the surrounding neighborhood into numerical order and then replacing the pixel being considered with the middle pixel value
If the neighborhood under consideration contains an even number of pixels, the average of the two middle pixel values is used
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 222: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/222.jpg)
Used to `blur' images and remove detail and noise
The effect of Gaussian smoothing is to blur an image
The Gaussian outputs a `weighted average' of each pixel's neighborhood, with the average weighted more towards the value of the central pixels
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 223: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/223.jpg)
A Gaussian provides gentler smoothing and preserves edges better than a similarly sized mean filter
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Before Blurring
After Blurring
![Page 224: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/224.jpg)
It is very useful in contrast enhancement
Especially to eliminate noise due to changing lighting conditions etc
Transforms the values in an intensity image so that the histogram of the output image approximately matches a specified histogram
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 225: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/225.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 226: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/226.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Filters and histograms
![Page 227: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/227.jpg)
‗Imfilter‘ function is used for creating different kinds of filters In MATLAB
B = imfilter(A,H,‘option‘) filters the multidimensional array A with the multidimensional filter H
The array A can be a nonsparse numeric array of any class and dimension
The result B has the same size and class as A
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 228: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/228.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Options in imfilter
Convolution is same as correlation except that the h matrix is inverted before applying the filter
![Page 229: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/229.jpg)
h = ones(5,5) / 25;
imsmooth = imfilter(im,h);
Here a mean filter is implemented using the appropriate ‗h‘ matrix
imshow(im), title('Original Image');
figure, imshow(imsmooth), title('Filtered Image')
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 230: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/230.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 231: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/231.jpg)
FSPECIAL is used to create predefined filters
h = FSPECIAL(TYPE);
FSPECIAL returns h as a computational molecule, which is the appropriate form to use with imfilter
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 232: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/232.jpg)
FSPECIAL is used to create predefined filters
h = FSPECIAL(TYPE);
FSPECIAL returns h as a computational molecule, which is the appropriate form to use with imfilter
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 233: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/233.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 234: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/234.jpg)
The process of adjusting intensity values can be done automatically by the histeq function
>>im = imread('pout.tif');
>>jm = histeq(im);
>>imshow(jm)
>>figure, imhist(jm,64)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 235: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/235.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Original Image
![Page 236: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/236.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Histogram Equalized Image
![Page 237: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/237.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 238: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/238.jpg)
Things aren‘t as simple as they were in Matlab
C/C++ needs a bit of syntax and formalities
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 239: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/239.jpg)
We‘ll try doing the following right now
› Gaussian filter
› Median filter
› Bilateral filter
› Simple blur
› Averaging filter
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 240: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/240.jpg)
Start Microsoft Visual Studio 2008
I assume you have OpenCV installed
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 241: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/241.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 242: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/242.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 243: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/243.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 244: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/244.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 245: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/245.jpg)
#include <cv.h>
#include <highgui.h>
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 246: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/246.jpg)
#include <cv.h>
#include <highgui.h>
int main()
{
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 247: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/247.jpg)
#include <cv.h>
#include <highgui.h>
int main()
{
IplImage* img = cvLoadImage(“C:\\noisy.jpg”);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 248: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/248.jpg)
#include <cv.h>
#include <highgui.h>
int main()
{
IplImage* img = cvLoadImage(“C:\\noisy.jpg”);
IplImage* imgBlur = cvCreateImage(cvGetSize(img),
8, 3);
IplImage* imgGaussian = cvCreateImage(cvGetSize
(img), 8, 3);
IplImage* imgMedian = cvCreateImage(cvGetSize
(img), 8, 3);
IplImage* imgBilateral = cvCreateImage(cvGetSize
(img), 8, 3);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 249: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/249.jpg)
cvSmooth(img, imgBlur, CV_BLUR, 3, 3);
cvSmooth(img, imgGaussian, CV_GAUSSIAN, 3, 3);
cvSmooth(img, imgMedian, CV_MEDIAN, 3, 3);
cvSmooth(img, imgBilateral, CV_BILATERAL, 3, 3);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 250: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/250.jpg)
cvNamedWindow(“original”);
cvNamedWindow(“blur”);
cvNamedWindow(“gaussian”);
cvNamedWindow(“median”);
cvNamedWindow(“bilateral”);
cvShowImage(“original”, img);
cvShowImage(“blur”, imgBlur);
cvShowImage(“gaussian”, imgGaussian);
cvShowImage(“median”, imgMedian);
cvShowImage(“bilateral”, imgBilateral);
cvWaitKey(0);
return 0;
}
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 251: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/251.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 252: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/252.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 253: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/253.jpg)
Blur: The plain simple Photoshop blur
Gaussian: The best result (preserved edges and smoothed out noise)
Median: Nothing special
Bilateral: Got rid of some noise, but preserved edges to a greater extend
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 254: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/254.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 255: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/255.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 256: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/256.jpg)
Your OpenCV installation comes with detailed documentation
*\OpenCV\docs\index.html
Scroll down, and you‘ll see OpenCV Reference Manuals
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 257: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/257.jpg)
Try looking up cvSmooth in the CV Reference Manual
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 258: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/258.jpg)
Now try looking up cvEqualizeHist
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 259: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/259.jpg)
There are no built-in functions for this
So, we‘ll code it ourselves
And this will be a good exercise for getting better at OpenCV
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 260: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/260.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 261: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/261.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 262: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/262.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 263: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/263.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 264: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/264.jpg)
#include <cv.h>
#include <highgui.h>
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 265: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/265.jpg)
#include <cv.h>
#include <highgui.h>
int main()
{
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 266: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/266.jpg)
#include <cv.h>
#include <highgui.h>
int main()
{
IplImage* imgRed[25];
IplImage* imgGreen[25];
IplImage* imgBlue[25];
Holds the R, G and B channels separately for each of the 25 images
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 267: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/267.jpg)
IplImage* imgBlue[25];
for(int i=0;i<25;i++)
{
IplImage* img;
char filename[150];
sprintf(filename, "%d.jpg", (i+1));
img = cvLoadImage(filename);
• Generate the strings ―1.jpg‖, ―2.jpg‖, etc and store them into filename• Load the image filename
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 268: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/268.jpg)
img = cvLoadImage(filename);
imgRed[i] = cvCreateImage(cvGetSize(img), 8,
1);
imgGreen[i] = cvCreateImage(cvGetSize(img), 8,
1);
imgBlue[i] = cvCreateImage(cvGetSize(img), 8,
1);
• Allocate memory for each component of image i
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 269: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/269.jpg)
imgBlue[i] = cvCreateImage(cvGetSize(img), 8,
1);
cvSplit(img, imgBlue[i], imgGreen[i],
imgRed[i], NULL);
cvReleaseImage(&img);
}
• Split img into constituent channels• Note the order: B G R• Release img
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 270: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/270.jpg)
We created 75 grayscale images: 25 for red, 25 for green and 25 for blues
Loaded 25 color images in the loop
Split each image, and stored in an appropriate grayscale image
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 271: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/271.jpg)
CvSize imgSize = cvGetSize(imgRed[0]);
IplImage* imgResultRed = cvCreateImage(imgSize, 8,
1);
IplImage* imgResultGreen = cvCreateImage(imgSize,
8, 1);
IplImage* imgResultBlue = cvCreateImage(imgSize,
8, 1);
IplImage* imgResult = cvCreateImage(imgSize, 8,
3);
• This will hold the final, filtered image• It will be a combination of the grayscale channels imgResultRed, imgResultGreen and imgResultBlue
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 272: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/272.jpg)
IplImage* imgResult = cvCreateImage(imgSize, 8,
3);
for(int y=0;y<imgSize.height;y++)
{
for(int x=0;x<imgSize.width;x++)
{
• Two loops to take us through the entire image
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 273: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/273.jpg)
for(int x=0;x<imgSize.width;x++)
{
int theSumRed=0;
int theSumGreen=0;
int theSumBlue=0;
for(int i=0;i<25;i++)
{
• To figure out the average, we need to find the numerator (the sum) over all 25 images
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 274: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/274.jpg)
for(int i=0;i<25;i++)
{
theSumRed+=cvGetReal2D(imgRed[i], y,
x);
theSumGreen+=cvGetReal2D(imgGreen[i],
y, x);
theSumBlue+=cvGetReal2D(imgBlue[i], y,
x);
}
• To figure out the average, we need to find the numerator (the sum) over all 25 images
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 275: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/275.jpg)
theSumRed = (float)theSumRed/25.0f;
theSumGreen = (float)theSumGreen/25.0f;
theSumBlue = (float)theSumBlue/25.0f;
cvSetReal2D(imgResultRed, y, x,
theSumRed);
cvSetReal2D(imgResultGreen, y, x,
theSumGreen);
cvSetReal2D(imgResultBlue, y, x,
theSumBlue);
}
}
• Once we have the sum, we divide by 25 and set the appropriate pixels
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 276: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/276.jpg)
cvMerge(imgResultBlue, imgResultGreen,
imgResultRed, NULL, imgResult);
cvNamedWindow("averaged");
cvShowImage("averaged", imgResult);
cvWaitKey(0);
return 0;
}
• Merge the three channels, and display the image
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 277: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/277.jpg)
cvLoadImage always loads as BGR
cvSplit to get the individual channels
cvMerge to combine individual channels into a color image
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 278: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/278.jpg)
IplImage to store any image in OpenCV
cvCreateImage to allocate memory
cvReleaseImage to erase an image from the RAM
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 279: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/279.jpg)
cvWaitKey to get a keypress within certain milliseconds
cvNamedWindow to create a window
cvShowImage to show an image in a window
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 280: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/280.jpg)
cvGetReal2D to get value at a pixel in grayscale images
cvSetReal2D to set the value at a pixel
CvSize to store an image‘s size
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 281: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/281.jpg)
you can always refer to the OpenCV documentation
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 282: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/282.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 283: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/283.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 284: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/284.jpg)
The process of extracting image components that are useful in representation of image for some particular purpose
Basic morphological operations are:
› Dilation
› Erosion
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 285: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/285.jpg)
The operation that grows or thickens objects in a binary image
The specific manner of thickening is controlled by a shape referred to as ―structuring element‖
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 286: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/286.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Structuring Element
Binary Image
![Page 287: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/287.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Dilated Image
![Page 288: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/288.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 289: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/289.jpg)
Erosion shrink or thins objects in a binary image
The manner of shrinkage is controlled by the structuring element
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 290: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/290.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Structuring Element
Binary Image
![Page 291: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/291.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Eroded Image
![Page 292: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/292.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 293: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/293.jpg)
In practical image processing dilation and erosion are performed in various combinations
An image can undergo a series for diltions and erosion using the same or different structuring element
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 294: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/294.jpg)
In practical image processing dilation and erosion are performed in various combinations
An image can undergo a series for diltions and erosion using the same or different structuring element
Two Common Kinds:
› Morphological Opening
› Morphological Closing
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 295: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/295.jpg)
It is basically one erosion followed by one dilation by the same structuring element
They are used to smooth object contours, break thin connections and remove thin protrusions
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 296: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/296.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
A—ImageB—Structuring element
![Page 297: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/297.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 298: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/298.jpg)
It is basically one dilation followed by one erosion by the same structuring element
They are used to smooth object contours like opening
But unlike opening they generally join narrow breaks, fill long thin gulfs and fills holes smaller than the structuring element
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 299: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/299.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
A—ImageB—Structuring element
![Page 300: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/300.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 301: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/301.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 302: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/302.jpg)
Used to generate a structuring element
>>se=strel(shape,parameters)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 303: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/303.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 304: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/304.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 305: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/305.jpg)
Dilation in matlab is done using the following command:
>>bw2=imdilate(bw,st)
Bw = Original image
St = Structuring element
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 306: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/306.jpg)
Erosion in matlab is done using the following command:
>>bw2=imerode(bw,st)
Bw = Original image
St = Structuring element
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 307: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/307.jpg)
Opening in matlab is done using the following command:
>>bw2=imopen(bw,st)
Bw = Original image
St = Structuring element
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 308: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/308.jpg)
Closing in matlab is done using the following command:
>>bw2=imclose(bw,st)
Bw = Original image
St = Structuring element
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 309: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/309.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 310: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/310.jpg)
cvErode(src, dst)
cvDilate(src, dst)
Opening & closing: use the appropriate sequence
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 311: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/311.jpg)
By default, OpenCV uses the zero structuring element (all are zeros)
You can explicitly specify your structuring element as well
Check the OpenCV Documentation for more information
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 312: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/312.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 313: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/313.jpg)
Computers can manipulate images very efficiently
But, comprehending an image with millions of colors is tough
Solution: Figure out interesting regions, and process them
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 314: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/314.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 315: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/315.jpg)
Each pixel is checked for its value
If it lies within a range, it is marked as ―interesting‖ (or made white)
Otherwise, it‘s made black
Figuring out the range depends on lighting, color, texture, etc
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 316: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/316.jpg)
Demo thresholdRGB
Demo thresholdHSV
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 317: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/317.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 318: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/318.jpg)
MATLAB provides a facility to execute multiple command statements with a single command. This is done by writing a .m file
Goto File > New > M-file
For example, the graythresh function can be manually written as a m-file as:
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 319: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/319.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 320: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/320.jpg)
Observe that, comments (in green) can be written after the symbol ‗%‘. A commented statement is not considered for execution
M-files become a very handy utility for writing lengthy programs and can be saved and edited, as and when required
We shall now see, how to define your own functions in MATLAB.
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 321: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/321.jpg)
Functions help in writing organized code with minimum repetition of logic
Instead of rewriting the instruction set every time, you can define a function
Syntax:
Create an m-file and the top most statement of the file should be the function header
function [return values] = function-name(arguments)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 322: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/322.jpg)
The inbuilt graythresh function in matlab is used for thresholding of grayscale images
It uses the Otsu‘s Method Of thresholding
A sample thresholding opreation has been shown in the next slide
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 323: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/323.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Image thresholded for the colour blue
![Page 324: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/324.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
The Real thing
![Page 325: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/325.jpg)
Thresholding of a grayscale image can be done in MATLAB using the following commands:
>> level=graythresh(imGRAY);
>> imBW = im2bw(imGRAY,level);
>> imview(imBW);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 326: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/326.jpg)
The graythresh command basically gives an idea as to what exactly the threshold value should be
Graythresh returns a value that lies in the range 0-1
This gives the level of threshold which is obtained by a complex method called the Otsu‘s Method of Thresholding
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 327: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/327.jpg)
This level can be converted into pixel value by multiplying by 255
Lets say, level=.4
Then threshold value for the grayscale image is:
0.4 x 255 =102
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 328: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/328.jpg)
What this indicates is that for the given image the values below 102 have to be converted to 0 and values from 103-255 to the value 1
Conversion from grayscale to binary image is done using the function:
>>imBW = im2bw(imGRAY,level);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 329: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/329.jpg)
Here level is the threshold level obtained from graythresh function
This function converts pixel intensities between 0 to level to zero intensity (black) and between level+1 to 255 to maximum (white)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 330: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/330.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 331: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/331.jpg)
In order to threshold an RGB colourimage using the graythresh function, the following have to be done:› Conversion of the RGB image into its 3
grayscale components
› Subtracting each of these components from the other 2 to get the pure colour intensities
› Finding level for each of the grayscale using graythresh
› Thresholding the image using imbw and the level
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 332: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/332.jpg)
Commands:
Im=Imread(‗rgb.jpg‘);
R = im(:,:,1); --Red
G = im(:,:,2); --Green
B = im(:,:,3); --Blue
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 333: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/333.jpg)
Ronly=R-B-G; --Pure RED
Gonly=G-R-B; --Pure GREEN
Bonly=B-G-R; --Pure BLUE
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 334: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/334.jpg)
Levelr=graythresh(Ronly);
Levelg=graythresh(Gonly);
Levelb=graythresh(Bonly);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 335: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/335.jpg)
Rthresh=im2bw (Ronly,levelR);
Gthresh=im2bw(Gonly,levelG);
Bthresh=im2bw(Bonly,levelB);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 336: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/336.jpg)
Using a manually designed thresh_toolfunction to adjust the levels as required
To get a feel of how levels vary
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 337: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/337.jpg)
s=size(im); temp=im; thresh=128; for i=1:s(1,1)
for j=1:s(1,2)
if temp(i,j)<thresh temp(i,j)=0;
else temp(i,j)=255;
end end
end imview(temp);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 338: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/338.jpg)
Splitting of HSV image into components
Using the Hue channel and thresholding it for different values
Since the hue value of a single colouris constant it is relatively simple to threshold and gives better accuracy
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 339: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/339.jpg)
Splitting of HSV image into components
Using the Hue channel and thresholding it for different values
Since the hue value of a single colouris constant it is relatively simple to threshold and gives better accuracy
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 340: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/340.jpg)
function [temp] = ht(im,level1,level2)s=size(im); temp=im; for i=1:s(1,1)
for j=1:s(1,2) if (temp(i,j)<level2 & temp(i,j)>level1)
temp(i,j)=1; else
temp(i,j)=0; end
end end imview(temp);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 341: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/341.jpg)
To this function we give the input arguments as the upper and lower bounds of the threshold levels
These levels can be obtained by having a look at the range of hue values for the particular colour
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 342: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/342.jpg)
Now that you know the basics
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 343: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/343.jpg)
cvThreshold(src, dst, threshold, max, type)
type:
› CV_THRESH_BINARY
› CV_THRESH_BINARY_INV
› And several others (check documentation)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 344: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/344.jpg)
cvInRangeS(src, scalarLower, scalarUpper, dst);
scalarLower = cvScalar(chan1, chan2, chan3, chan4);
scalarUpper = cvScalar(chan1, chan2, chan3, chan4);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 345: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/345.jpg)
Ultra basics: motors, drives, etc
Digital image representation
Color spaces
Inter-conversion of color spaces
Electronics
Filtering
Thresholding
Morphology
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 346: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/346.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 347: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/347.jpg)
After thresholding, we get a binary image
We want useable information like centers, outlines, etc
There geometrical properties can be found using many methods. We‘ll talk about moments and contours only.
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 348: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/348.jpg)
Moments are a mathematical concept
∑ ∑intensity*xxorder*yyorder
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 349: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/349.jpg)
Consider xorder=0 and yorder=0 for a binary image
So you‘re just summing up pixel values
This means, you‘re calculating the area of the white pixels
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 350: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/350.jpg)
Now consider xorder=1 and yorder=0 for a binary image
You sum only those x which are white
So you‘re calculating the numerator of an average
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 351: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/351.jpg)
The number of points where the pixel is white is the area of the image
So, dividing this particular moment (xorder=1, yorder=0) by the earlier example (xorder=0, yorder=0) gives the average x
This is the x coordinate of the centroidof the blob
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 352: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/352.jpg)
Similarly, for xorder=0 and yorder=1, you‘ll get the y coordinate
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 353: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/353.jpg)
The order of a moment = xorder+yorder
So, the area is a zero order moment
The centroid coordinate = a first order moment / the zero order moment
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 354: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/354.jpg)
There are entire books written on this topic
You can find complex geometrical properties, like the eccentricity of an ellipse, radius of curvature of objects, etc
Also check for Hu invariants if you‘re interested
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 355: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/355.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Centroid Area etc
![Page 356: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/356.jpg)
These are pixels of an image that are conencted to each other forming separate blobs in an image
They can be seperated out and labelled
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 357: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/357.jpg)
>>L = bwlabel(BW,n)
Returns a matrix L, of the same size as BW, containing labels for the connected objects in BW
n can have a value of either 4 or 8, where 4 specifies 4-connected objects and 8 specifies 8-connected objects; if the argument is omitted, it defaults to 8
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 358: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/358.jpg)
>>L = bwlabel(BW,n)
Returns a matrix L, of the same size as BW, containing labels for the connected objects in BW
n can have a value of either 4 or 8, where 4 specifies 4-connected objects and 8 specifies 8-connected objects; if the argument is omitted, it defaults to 8
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 359: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/359.jpg)
STATS = regionprops(L,properties)
Measures a set of properties for each labeled region in the label matrix L
The set of elements of L equal to 1 corresponds to region 1; the set of elements of L equal to 2 corresponds to region 2; and so on
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 360: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/360.jpg)
'Area'– The actual number of pixels in the region
'Centroid'-- The center of mass of the region. Note that the first element of Centroid is the horizontal coordinate (or x-coordinate) of the center of mass, and the second element is the vertical coordinate (or y-coordinate)
'Orientation' -- Scalar; the angle (in degrees) between the x-axis and the major axis of the ellipse that has the same second-moments as the region. This property is supported only for 2-D input label matrices
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 361: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/361.jpg)
BW = imread('text.png');
L = bwlabel(BW);
stats = regionprops(L,'all');
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 362: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/362.jpg)
Label into an RGB image for better vizualization
RGB = label2rgb(L)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 363: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/363.jpg)
Binary area open remove small objects
BW2 = bwareaopen(BW,P)
Removes from a binary image all connected components (objects) that have fewer than P pixels, producing another binary image, BW2.
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 364: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/364.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 365: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/365.jpg)
OpenCV supports functions to calculate moments upto order 3
CvMoments *moments = (CvMoments*)malloc(sizeof
(CvMoments));
cvMoments(img, moments, 1);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 366: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/366.jpg)
cvGetSpatialMoment(moments, xorder, yorder)
cvGetCentralMoment(moments, xorder, yorder)
Central = spatial/area
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 367: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/367.jpg)
Example
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 368: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/368.jpg)
For robotics purposes, moments are fine till have one single object
If we have multiple objects in the same binary image
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 369: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/369.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 370: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/370.jpg)
You can think of contours as an approximation of a binary image
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 371: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/371.jpg)
You get polygonal approximation of each connected area
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 372: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/372.jpg)
The output you get for the previous binary image is:
› Four ―chains‖ of points
› Each chain can have any number of points
› In our case, each chain has four points
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 373: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/373.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Contour plotting
![Page 374: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/374.jpg)
Contour plot of an image im can be made in MATLAB using the command:
im = imread(‗img.jpg');
imcontour(im,level)
Level=number of equally spaced contour levels
if level is not given it will choose automatically
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 375: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/375.jpg)
OpenCV linked lists to store the ―chains‖
We‘ll see some code to find out the squares in the thresholded image you saw
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 376: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/376.jpg)
CvSeq* contours;
CvSeq* result;
CvMemStorage *storage = cvCreateMemStorage(0);
• The chains are stored in contours• result is a temporary variable• storage is for temporary memory allocation
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 377: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/377.jpg)
cvFindContours(img, storage, &contours, sizeof(CvContour),
CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
• img is a grayscale thresholded image• storage is for temporary storage• All chains found would be stored in the contours sequence• The rest of the parameters are usually kept at these values• Check the OpenCV documentation for details information about the last four variables
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 378: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/378.jpg)
while(contours)
{
result = cvApproxPoly(contours, sizeof(CvContour),
storage, CV_POLY_APPROX_DP,
cvContourPerimeter(contours)*0.02, 0);
• The previous command makes contours point to the first chain• We‘re approximating the contour right now
• After this command, result stores the approximate contour as a polygon (many points)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 379: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/379.jpg)
if(result->total==4)
{
CvPoint *pt[4];
for(int i=0;i<4;i++)
pt[i] = (CvPoint*)cvGetSeqElem(result, i);
}
• We‘re looking for quadrilaterals, so we check if the number of points in this particular polygon is 4
• Then, get extract each point using the command cvGetSeqElem
• Once you have the points, you can actually check the shape of the object as well (by checking angles, lengths, etc)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 380: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/380.jpg)
// Do whatever you want with the 4 points
contours = contours->h_next;
}
• Do whatever you want to do with the four points
• Then, we move onto processing the next contour
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 381: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/381.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 382: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/382.jpg)
MATLAB has an image acquisition toolbox which helps capture images
Now-a-days most of the cameras are available with USB interface
Once you install the driver for the camera, the computer detects the device whenever you connect it
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 383: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/383.jpg)
In MATLAB, you can check if the support is available for your camera
MATLAB has built-in adaptors for accessing these devices
An adaptor is a software that MATLAB uses to communicate with an image acquisition device
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 384: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/384.jpg)
COMMANDS:
>> imaqhwinfo
>> cam=imaqhwinfo;
>> cam.InstalledAdaptors
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 385: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/385.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 386: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/386.jpg)
To get more information about the device, type
>>dev_info = imaqhwinfo('winvideo',1)
Instead of ‗winvideo‘, if imaqhwinfoshows another adaptor, then type that adaptor name instead of ‘winvideo’.
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 387: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/387.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 388: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/388.jpg)
You can preview the video captured by the image by defining an object and associate it with the device
>>vid=videoinput(‗winvideo‘,1,‗RGB24_320x240‘)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 389: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/389.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 390: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/390.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Now to see the video insert the following command:
>> preview(vid)
![Page 391: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/391.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
You should see a window pop-up, that displays what your camera is capturing
![Page 392: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/392.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
The camera may support multiple video formats. To see for yourself all the supported formats, type
>>dev_info = imaqhwinfo('winvideo',1);
>>celldisp(dev_info.SupportedFormats);
Check out for yourself the display of other formats, by replacing `RGB24_320x240` with other formats, in the definition of the object vid
![Page 393: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/393.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Now to capture an image from the video, define the object vid as described before and use getdata to capture a frame from the video
>>start(vid); % This command initiates capturing of frames and stores the frames in memory
>>im=getdata(vid,1);
>>imview(im);
![Page 394: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/394.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
You can store the captured image as a .jpg or .gif file using imwrite function
>>imwrite(im,'testimage.gif');
The image will be stored in ‗MATLAB71\work‘ folder
![Page 395: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/395.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 396: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/396.jpg)
Static Processing
Step Processing
Real-Time Processing
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 397: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/397.jpg)
Take a single picture of the arena and process it
Find out critical regions and points
Apply some geometry and mathematical calculations
Then blindly follow a specified path
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 398: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/398.jpg)
Advantages
› Simplest to implement
› Can be fairly accurate with stepper motors
Disadvantages
› Bot goes blind because only one picdetermines the bot motion
› Accuracy is very low especially with DC motors
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 399: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/399.jpg)
Take images of the arena in discrete intervals (say Eg. 10secs/image)
Process the images and find out critical regions and points
Check bot orientation at these intervals and try to correct
Partial feedback mechanism is implemented
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 400: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/400.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Advantages› Quite simple to implement
› Can be very accurate with stepper motors
Disadvantages› Bot goes blind for a particular period of
time
› Accuracy is compromised with DC motors
› Dynamic environmental changes cannot be accounted for
![Page 401: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/401.jpg)
Take images of the arena continuously at a particular frame rate
Process the images and find out critical regions and points
Check bot orientation at every frame and correct
Complete feedback mechanism is implemented
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 402: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/402.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Advantages
› Very accurate for both DC and Stepper motors
› Gives dynamic feedback and accounts for changing environment
› Can give bot orientation at each point of time
Disadvantages
› Requires more processing power
› Requires more memory for taking so many images
![Page 403: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/403.jpg)
Real-time image processing is the best approach for any real application
Dynamic feedback systems give excellent accuracy and precision and hence is the best approach
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 404: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/404.jpg)
Image processing is an important tool in many applications
Problem is that one needs to acquire images and pre-process them before doing actual IP
Sometimes it may be required that offline image processing is not possible i.e. one needs to proceed with real-time IP or even more, processing of the video itself
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 405: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/405.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 406: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/406.jpg)
Every time you want to capture an instantaneous image, you have to stop the video, start it again and use the getdata function
To avoid this repetitive actions, the Image Acquisition toolbox provides an option for triggering the video object when required and capture an instantaneous frame
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 407: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/407.jpg)
Every time you want to capture an instantaneous image, you have to stop the video, start it again and use the getdata function
To avoid this repetitive actions, the Image Acquisition toolbox provides an option for triggering the video object when required and capture an instantaneous frame
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 408: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/408.jpg)
Create an m-file with following sequence of commands:
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 409: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/409.jpg)
vid=videoinput('winvideo',1);
triggerconfig(vid,'manual');
set(vid,'FramesPerTrigger',1 );
set(vid,'TriggerRepeat', Inf);
start(vid);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 410: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/410.jpg)
for i=1:5
trigger(vid);
im= getdata(vid,1);
figure,imshow(im);
end
stop(vid);
delete(vid);
clear vid;
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 411: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/411.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
In the above code, object im gets overwritten while execution of each of the interations of the for loop
To be able to see all the five images, replace im with im(:,:,:,i)
![Page 412: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/412.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
In the above code, object im gets overwritten while execution of each of the interations of the for loop
To be able to see all the five images, replace im with im(:,:,:,i)
![Page 413: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/413.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
triggerconfig sets the object to manual triggering, since its default triggering is of type immediate
In immediate triggering, the video is captured as soon as you start the object ‘vid’
The captured frames are stored in memory. Getdata function can be used to access these frames
But in manual triggering, you get the image only when you ‗trigger’ the video
![Page 414: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/414.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
‗FramesPerTrigger‘ decides the number of frames you want to capture each time ‘trigger’ is executed
TriggerRepeat has to be either equal to the number of frames you want to process in your program or it can be set to Inf
If set to any positive integer, you will have to ‘start’ the video capture again after trigger is used for those many number of times
![Page 415: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/415.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Once you are done with acquiring of frames and have stored the images, you can stop the video capture and clear the stored frames from the memory buffer, using following commands:
>>stop(vid);
>>delete(vid);
>>clear vid;
![Page 416: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/416.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Getsnapshot function returns one image frame and is independent ofFramesPerTrigger property
So if you want to process your images in real-time, this is all you need:
![Page 417: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/417.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
vid=videoinput(‗winvideo‘,1) triggerconfig(vid,'manual'); set(vid,'FramesPerTrigger',1); set(vid,'TriggerRepeat', Inf); start(vid); while(1) { trigger(vid); im= getdata(vid,1); % write your image processing algorithm here % % you may break this infinite while loop if a certain
condition is met }
![Page 418: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/418.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 419: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/419.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Using MATLAB
![Page 420: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/420.jpg)
MATLAB provides support to access serial port (also called as COM port) and parallel port (also called as printer port or LPT port) of a PC
MATLAB has an adaptor to access the parallel port (similar to adaptor for image acquisition)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 421: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/421.jpg)
To access the parallel port in MATLAB, define an object
>> parport= digitalio('parallel','LPT1');
You may obtain the port address using,
>> get(parport,'PortAddress') >> daqhwinfo('parallel'); % To get
data acquisition hardware information
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 422: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/422.jpg)
You have to define the pins 2-9 as output pins, by using addline function
>> addline(parport, 0:7, 'out')
Now put the data which you want to output to the parallel port into a matrix; e.g.
>> dataout = logical([1 0 1 0 1 0 1 1]);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 423: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/423.jpg)
Now to output these values, use the putvalue function
>> putvalue(parport,dataout);
Alternatively, you can write the decimal equivalent of the binary data and output it
>> data = 23; >> putvalue(parport,data);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 424: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/424.jpg)
You can connect the pins of the parallel port to the driver IC for the left and right motors of your robot, and control the left, right, forward and backward motion of the vehicle
You will need a H-bridge for driving the motor in both clockwise and anti-clockwise directions
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 425: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/425.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
Using MATLAB
![Page 426: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/426.jpg)
Things are a little more involved
There is this library called inpout32
Makes your task really simple
Just follow the instructions that come along, and you‘ll be sending data to your robot!
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 427: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/427.jpg)
Or you could use the following code
The idea is:
› Create a virtual file that ―represents‖ the port itself (parallel, serial, etc)
› Keep this file open
› And keep writing to this file
› So, data is automatically send to the desired port
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 428: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/428.jpg)
Step 1: Create a global variable named hPort
HANDLE hPort;
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 429: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/429.jpg)
Step 2: Create function to create the virtual file, and store its ―handle‖ in hPort
(contd)
bool SerialOpen(LPCWSTR strPort){
// Open the serial port.
hPort = (HANDLE)CreateFile (strPort, // Pointer to the name of the port
GENERIC_READ | GENERIC_WRITE, // Access (read-write) mode
0, // Share mode
NULL, // Pointer to the security attribute
OPEN_EXISTING, // How to open the serial port
0, // Port attributes
(long)NULL); // Handle to port with attribute
// to copy
DCB PortDCB;
DWORD dwError;
// Initialize the DCBlength member.
PortDCB.DCBlength = sizeof (DCB);
// Get the default port setting information.
GetCommState (hPort, &PortDCB);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 430: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/430.jpg)
Step 2: Some more port configuration
(contd)
// Change the DCB structure settings.
PortDCB.BaudRate = 9600; // Current baud
PortDCB.fBinary = TRUE; // Binary mode; no EOF check
PortDCB.fParity = TRUE; // Enable parity checking
PortDCB.fOutxCtsFlow = FALSE; // No CTS output flow control
PortDCB.fOutxDsrFlow = FALSE; // No DSR output flow control
PortDCB.fDtrControl = DTR_CONTROL_ENABLE; // DTR flow control type
PortDCB.fDsrSensitivity = FALSE; // DSR sensitivity
PortDCB.fTXContinueOnXoff = TRUE; // XOFF continues Tx
PortDCB.fOutX = FALSE; // No XON/XOFF out flow control
PortDCB.fInX = FALSE; // No XON/XOFF in flow control
PortDCB.fErrorChar = FALSE; // Disable error replacement
PortDCB.fNull = FALSE; // Disable null stripping
PortDCB.fRtsControl = RTS_CONTROL_ENABLE; // RTS flow control
PortDCB.fAbortOnError = FALSE; // Do not abort reads/writes on error
PortDCB.ByteSize = 8; // Number of bits/byte, 4-8
PortDCB.Parity = NOPARITY; // 0-4=no,odd,even,mark,space
PortDCB.StopBits = ONESTOPBIT; // 0,1,2 = 1, 1.5, 2
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 431: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/431.jpg)
Step 2: And finally…
// Configure the port according to the specifications of the DCB
// structure.
if (!SetCommState (hPort, &PortDCB))
{
// Could not configure the serial port.
dwError = GetLastError();
printf("Serial port creation error: %d", dwError);
MessageBox(NULL, L"Unable to configure the serial port", L"Error", MB_OK);
return false;
}
return true;
}
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 432: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/432.jpg)
This function works equally well for both serial ports and parallel ports
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 433: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/433.jpg)
Step 2: I‘ve assumed you‘re creating a function
This function returns a true when the port is created successfully
If you‘re not, replace the ―return‖ statements with ―printf‖s
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 434: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/434.jpg)
Example usage of this function
› hPort = SerialOpen(L”COM8:”); // Serial Port
› hPort = SerialOpen(L”LPT1:”); // Parallel
This is actually how you can access ports in DOS as well… using COM8: and LPT1: instead of C:, D:, etc
The L before the quotes is just syntax for C/C++
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 435: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/435.jpg)
Step 3: Next, we‘ll write functions to write to the virtual file we‘ve created
bool SerialWrite(byte theByte)
{
// The port wasn't opened
if(!hPort)
return false;
DWORD dwError, dwNumBytesWritten;
WriteFile (hPort, // Port handle
theByte, // Pointer to the data to write
1, // Number of bytes to write
&dwNumBytesWritten, // Pointer to the number of bytes written
NULL // Must be NULL
);
return true;
}
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 436: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/436.jpg)
You pass the byte you want to write as a parameter, and it gets written to the port
Example: SerialWrite(12)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 437: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/437.jpg)
Step 4: And finally, a function to close the port
Example: SerialClose()
bool SerialClose(void)
{
if(!hPort)
return false;
CloseHandle(hPort);
return true;
}
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 438: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/438.jpg)
Again, I‘ll emphasize that these functions will work equally well for both parallel ports and serial ports
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 439: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/439.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 440: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/440.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 441: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/441.jpg)
A critical part of image segmentation
Used for detecting meaningful discontinuities in intensity values
Done by finding first and second order derivatives of the image
Also known as gradient of the image
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 442: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/442.jpg)
There are different kinds of edge detectors based on the criteria of derivatives
An edge detector can be sensitive to horizontal or vertical lines or both
In detection we try to find out regions where the derivative or gradient is greater than a specified threshold
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 443: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/443.jpg)
General Command in MATLAB
[g t] = edge(im,‘method‘,parameters);
g-gradient, t-threshold value
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 444: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/444.jpg)
Different methods of edge detection
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 445: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/445.jpg)
A threshold value can be given manually as argument
g=edge(im,‘method‘,t);
t-threshold
Sobel& Canny are the more frequently used edge detectors
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 446: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/446.jpg)
A threshold value can be given manually as argument
g=edge(im,‘method‘,t);
t-threshold
Sobel& Canny are the more frequently used edge detectors
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 447: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/447.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 448: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/448.jpg)
Image Acquisition
Image Cropping
Image Filtering
Image Segmentation
Image Thresholding
Finding critical points (Centroids)
Finding bot centroidand orientation
Robot Feedback control
Robot Control(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 449: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/449.jpg)
Static processing
Step processing
Real-time processing
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 450: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/450.jpg)
Manual Cropping:
› I2 = imcrop(I);
Coordinate Cropping:
› I2 = imcrop(I,[x1 y1 x2 y2]);
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 451: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/451.jpg)
Mean filter
Median filter
Histogram equalization
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 452: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/452.jpg)
Use different kinds of edge detections
› Sobel
› Canny
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 453: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/453.jpg)
Thresholding
› In RGB
› In HSV
Separating colors
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 454: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/454.jpg)
Finding areas of blobs
Finding centroids of blobs
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 455: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/455.jpg)
Using orientation
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 456: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/456.jpg)
Control using parallel port
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 457: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/457.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 458: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/458.jpg)
The idea of an orientation tag is to precisely indicate the orientation of the robot
It should happen with the least number of operations
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 459: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/459.jpg)
This orientation tag is bad
You can tell the position, but not the direction the robot is facing
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 460: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/460.jpg)
This orientation tag is excellent for a single bot
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 461: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/461.jpg)
But if you have a team of bots, this won‘t be the best choice
You need to have multiple colors for each bot
So, you have more operations
Slowing down the program
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 462: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/462.jpg)
A better choice for a team of bots
The asymmetry helps distinguish between multiple bots, with just two colors
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 463: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/463.jpg)
Some more orientation tags
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 464: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/464.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 465: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/465.jpg)
With C/C++ you get two methods to capture images:
› Using OpenCV‘s built in libraries
› Using some 3rd party capturing library
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 466: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/466.jpg)
Use OpenCV functions
Use DirectX functions (on Windows)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 467: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/467.jpg)
Images, served in C/C++
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 468: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/468.jpg)
OpenCV lets you access cameras through the CvCapture structure
So we create a CvCapture structure
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 469: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/469.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 470: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/470.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 471: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/471.jpg)
Tries to get access to cam #index
Useful when you have multiple cameras attached to the same machine (like in stereo vision)
Then we check if we were able to get exclusive control of the camera. If not, quit.
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 472: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/472.jpg)
This window is for our convenience
Displaying what‘s going on within the program, what decisions are taken, etc
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 473: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/473.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 474: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/474.jpg)
We‘ll create a function to take snapshots
It will use the CvCapture structure to tap into the camera‘s stream
It will return a single frame as an IplImage structure
Scroll down, and add the function
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 475: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/475.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 476: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/476.jpg)
Now, we‘ll display a live stream in the window we had created
Because the getSnapshot() function returns a single frame, we need to take snaps regularly
So it goes into the do…while loop
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 477: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/477.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 478: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/478.jpg)
If you try compiling the program right now, you‘ll get an error
getSnapshot() comes ―after‖ the main function
So the compiler doesn‘t know if it exists
Hence we need the so called ―prototype‖
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 479: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/479.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 480: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/480.jpg)
Once we‘re done, we need to release
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 481: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/481.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 482: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/482.jpg)
The cvCaptureFromCam works only for some supported cameras
DirectX is a much bigger library and supports almost all cameras that exist
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 483: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/483.jpg)
First, download the Microsoft Platform SDK for Windows Server 2003 R2
› http://www.microsoft.com/downloads/details.aspx?familyid=E15438AC-60BE-41BD-AA14-7F1E0F19CA0D&displaylang=en
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 484: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/484.jpg)
Second, download the DirectX SDK
› http://www.microsoft.com/downloads/details.aspx?FamilyID=77960733-06e9-47ba-914a-844575031b81&DisplayLang=en
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 485: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/485.jpg)
Third, download the DirectShow SDK
› http://www.microsoft.com/downloads/details.aspx?FamilyID=8af0afa9-1383-44b4-bc8b-7d6315212323&DisplayLang=en
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 486: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/486.jpg)
Fourth, download the VideoInputlibrary
› http://muonics.net/school/spring05/videoInput/
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 487: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/487.jpg)
Fourth, download the VideoInputlibrary
› http://muonics.net/school/spring05/videoInput/
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 488: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/488.jpg)
These are external libraries. So we need to tell Visual Studio where to find the required external files
So we follow steps similar to the OpenCV ones.
The VideoInput package comes with lots of sample code, so you shouldn‘t have much problem
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 489: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/489.jpg)
You can check some sample code at this website as well
› http://opencv.willowgarage.com/wiki/DirectShow
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 490: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/490.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 491: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/491.jpg)
For real time, you need to process captured frames as quickly as possible
So we use a loop of some kind (usually a do…while)
Within the loop, you do the following tasks:
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 492: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/492.jpg)
Task 1: Capture an image
Task 2: Pre–processing it
Task 3: Process the image
Task 4: Take a decision
Task 5: Move the bot (with feedback)
Task 6: Go to Task 1
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 493: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/493.jpg)
Quite obvious
You need an image
Only then can you process something
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 494: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/494.jpg)
Once you have the image, you need to enhance it with pre-processing
Increase contrast, reduce noise, smoothen it out, etc
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 495: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/495.jpg)
With the pre-processed image, you figure out the location of each object in the arena
Use moments, contours, or anything else
Thresholding, morphology, etc are helpful here
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 496: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/496.jpg)
With the location of each object, you can decide what to do next
Bot: Should I go to the red ball because it‘s the closest? Or should I go to the green ball because it has the maximum number of points
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 497: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/497.jpg)
Once decided where to go, you make the robot move
You must include feedback in this step itself (maybe another do…while loop)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 498: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/498.jpg)
You have two options:
› Check if further movement is necessary (have all the balls been potted?) If required, only then go to Task 1
› Blindly go to Task 1 (the decision module will tell the bot when to stop)
Both options are good enough
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 499: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/499.jpg)
Task 1: Capturing the image
Task 2: Pre-processing the image
Task 3: Processing the image
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 500: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/500.jpg)
Task 4: Taking a decision
Task 6: Go to Task 1
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 501: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/501.jpg)
Task 5: Move the bot (with feedback)
We won‘t go into code. Just high level logic on how to go about it
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 502: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/502.jpg)
For the simplest feedback mechanism, you use pixels
Everything is measure in terms of pixels: distances, coordinates, etc
Angles are usually represented in radians (cos, sin, etc work well with radians)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 503: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/503.jpg)
First, you need to decide your coordinate system
And you need to stick with it throughout your code
Here‘s a coordinate system I used several times
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 504: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/504.jpg)
This is a top-down view of the arena, just like the camera sees it
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 505: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/505.jpg)
So all your calculations MUST use this particular coordinate system
In particular, you must make sure all your angle calculations are consistent
And that they cycle through 359-1 degrees perfectly
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 506: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/506.jpg)
Possible function you might want to create:
› MoveBotToPosition(x, y)
› TurnBotToAngle(angle)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 507: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/507.jpg)
TurnBotToAngle(angle)
› Turns the bot to angle degrees of the coordinate system
› This would be the very basic feedback function
› Within this function, you have a loop
› This loop keeps running as long as the botisn‘t oriented at angle degrees
› You‘ll take snapshots within this function as well
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 508: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/508.jpg)
MoveBotToPosition(x,y)
› Moves the bot until it reaches the coordinates (x,y) in the image
› If required, you can also put a call to TurnBotToAngle (to orient the bot to move)
› Again, there‘s a loop which keeps running until the bot reaches the desired position
› And you‘ll need to take multiple snapshots to check where the bot actually is
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 509: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/509.jpg)
You obviously need to set a range
If you say TurnBotToAngle(30), it‘s very unlikely that the bot will orient to exactly 30 degrees
A range, say 28-32 should be good enough
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 510: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/510.jpg)
Reminder: All x, y and angle we‘ve talked about are in the image, in terms of pixels
We have no idea how they relate to physical distances and angles
But we‘re sure that they are proportional to physical distances and angles
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 511: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/511.jpg)
Though, you CAN calibrate your camera and actually figure out physical distances
For example, 5pixels = 3cm
This is very much possible, but of no use for our purposes!
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 512: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/512.jpg)
Use classes and structures as much as possible. And you don‘t need to know OOPs to use them.
They really simplify your work, and even make the code more readable
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 513: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/513.jpg)
What we‘ve described requires that the bot stops and then checks if the angle is correct or not, etc
Try working on something which checks the bot‘s angle without stopping the bot
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 514: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/514.jpg)
Working in the YUV space (this is what cameras use… so thresholding in YUV itself will eliminate processing time consumed by YUV to RGB conversion)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 515: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/515.jpg)
Kalman filters: If a bot is static, still it‘s position might be calculated as different for different frames.
If you use Kalman filters, you can ―smooth out‖ the position data and get precise positioning and angle data
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 516: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/516.jpg)
Can you eliminate thresholdingaltogether?
Yes you can!!!
How, you ask? Figure it out! Its EXTREMELY simple!
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 517: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/517.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 518: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/518.jpg)
You now know enough to participate in image processing based competitions
All this knowledge can even serve as a start point for further studies in image processing
Enjoy!
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 519: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/519.jpg)
Utkarsh Sinha
Ajusal Sugathan
Oh, btw, visit http://liquidmetal.in/ for more!
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha
![Page 520: Anaglyph Tutorial](https://reader033.fdocuments.us/reader033/viewer/2022061215/549dadd4b37959a5618b457f/html5/thumbnails/520.jpg)
(c) 2009-2010 Electronics & Robotics Club, BITS-Pilani, Goa | Ajusal Sugathan & Utkarsh Sinha