Fixed more broken links from previous tutorials

This commit is contained in:
Ana Huaman 2011-08-15 02:29:03 +00:00
parent 5bc5d9a47e
commit 41f5a9cab9
10 changed files with 116 additions and 59 deletions

View File

@ -6,15 +6,46 @@ Harris corner detector
Goal
=====
In this tutorial you will learn how to:
In this tutorial you will learn:
.. container:: enumeratevisibleitemswithsquare
* What features are and why they are important
* Use the function :corner_harris:`cornerHarris <>` to detect corners using the Harris-Stephens method.
Theory
======
What is a feature?
-------------------
.. container:: enumeratevisibleitemswithsquare
* In computer vision, usually we need to find matching points between different frames of an environment. Why? If we know how two images relate to each other, we can use *both* images to extract information of them.
* When we say **matching points** we are referring, in a general sense, to *characteristics* in the scene that we can recognize easily. We call these characteristics **features**.
* **So, what characteristics should a feature have?**
* It must be *uniquely recognizable*
Types of Image Features
------------------------
To mention a few:
.. container:: enumeratevisibleitemswithsquare
* Edges
* Corner (also known as interest points)
* Blobs (also known as regions of interest )
In this tutorial we will study the *corner* features, specifically.
Why is a corner so special?
----------------------------
Code
====

View File

@ -70,7 +70,7 @@ Erosion
Code
======
This tutorial code's is shown lines below. You can also download it from `here <https://code.ros.org/svn/opencv/trunk/opencv/samples/cpp/tutorial_code/Image_Processing/Morphology_1.cpp>`_
This tutorial code's is shown lines below. You can also download it from `here <https://code.ros.org/svn/opencv/trunk/opencv/samples/cpp/tutorial_code/ImgProc/Morphology_1.cpp>`_
.. code-block:: cpp
@ -175,16 +175,16 @@ Explanation
#. Most of the stuff shown is known by you (if you have any doubt, please refer to the tutorials in previous sections). Let's check the general structure of the program:
* Load an image (can be RGB or grayscale)
.. container:: enumeratevisibleitemswithsquare
* Create two windows (one for dilation output, the other for erosion)
* Load an image (can be RGB or grayscale)
* Create two windows (one for dilation output, the other for erosion)
* Create a set of 02 Trackbars for each operation:
* Create a set of 02 Trackbars for each operation:
* The first trackbar "Element" returns either **erosion_elem** or **dilation_elem**
* The second trackbar "Kernel size" return **erosion_size** or **dilation_size** for the corresponding operation.
* The first trackbar "Element" returns either **erosion_elem** or **dilation_elem**
* The second trackbar "Kernel size" return **erosion_size** or **dilation_size** for the corresponding operation.
* Every time we move any slider, the user's function **Erosion** or **Dilation** will be called and it will update the output image based on the current trackbar values.
* Every time we move any slider, the user's function **Erosion** or **Dilation** will be called and it will update the output image based on the current trackbar values.
Let's analyze these two functions:
@ -220,13 +220,15 @@ Explanation
Size( 2*erosion_size + 1, 2*erosion_size+1 ),
Point( erosion_size, erosion_size ) );
We can choose any of three shapes for our kernel:
We can choose any of three shapes for our kernel:
* Rectangular box: MORPH_RECT
* Cross: MORPH_CROSS
* Ellipse: MORPH_ELLIPSE
.. container:: enumeratevisibleitemswithsquare
Then, we just have to specify the size of our kernel and the *anchor point*. If not specified, it is assumed to be in the center.
+ Rectangular box: MORPH_RECT
+ Cross: MORPH_CROSS
+ Ellipse: MORPH_ELLIPSE
Then, we just have to specify the size of our kernel and the *anchor point*. If not specified, it is assumed to be in the center.
* That is all. We are ready to perform the erosion of our image.
@ -271,4 +273,4 @@ Results
.. image:: images/Morphology_1_Tutorial_Cover.jpg
:alt: Dilation and Erosion application
:align: center
:align: center

View File

@ -8,7 +8,9 @@ Goal
In this tutorial you will learn how to:
a. Use the OpenCV function :canny:`Canny <>` to implement the Canny Edge Detector.
.. container:: enumeratevisibleitemswithsquare
* Use the OpenCV function :canny:`Canny <>` to implement the Canny Edge Detector.
Theory
=======
@ -265,21 +267,21 @@ Explanation
Result
=======
#. After compiling the code above, we can run it giving as argument the path to an image. For example, using as an input the following image:
* After compiling the code above, we can run it giving as argument the path to an image. For example, using as an input the following image:
.. image:: images/Canny_Detector_Tutorial_Original_Image.jpg
:alt: Original test image
:width: 200pt
:align: center
and moving the slider, trying different threshold, we obtain the following result:
* Moving the slider, trying different threshold, we obtain the following result:
.. image:: images/Canny_Detector_Tutorial_Result.jpg
:alt: Result after running Canny
:width: 200pt
:align: center
Notice how the image is superposed to the black background on the edge regions.
* Notice how the image is superposed to the black background on the edge regions.

View File

@ -8,10 +8,12 @@ Goal
In this tutorial you will learn how to:
#. Use the OpenCV function :copy_make_border:`copyMakeBorder <>` to set the borders (extra padding to your image).
.. container:: enumeratevisibleitemswithsquare
* Use the OpenCV function :copy_make_border:`copyMakeBorder <>` to set the borders (extra padding to your image).
Theory
============
========
.. note::
The explanation below belongs to the book **Learning OpenCV** by Bradski and Kaehler.
@ -208,10 +210,12 @@ Results
#. After compiling the code above, you can execute it giving as argument the path of an image. The result should be:
* By default, it begins with the border set to BORDER_CONSTANT. Hence, a succession of random colored borders will be shown.
* If you press 'r', the border will become a replica of the edge pixels.
* If you press 'c', the random colored borders will appear again
* If you press 'ESC' the program will exit.
.. container:: enumeratevisibleitemswithsquare
* By default, it begins with the border set to BORDER_CONSTANT. Hence, a succession of random colored borders will be shown.
* If you press 'r', the border will become a replica of the edge pixels.
* If you press 'c', the random colored borders will appear again
* If you press 'ESC' the program will exit.
Below some screenshot showing how the border changes color and how the *BORDER_REPLICATE* option looks:

View File

@ -8,10 +8,12 @@ Goal
In this tutorial you will learn how to:
* Use the OpenCV function :filter2d:`filter2D <>` to create your own linear filters.
.. container:: enumeratevisibleitemswithsquare
* Use the OpenCV function :filter2d:`filter2D <>` to create your own linear filters.
Theory
============
=======
.. note::
The explanation below belongs to the book **Learning OpenCV** by Bradski and Kaehler.

View File

@ -9,7 +9,9 @@ Goal
In this tutorial you will learn how to:
a. Use the OpenCV function :laplacian:`Laplacian <>` to implement a discrete analog of the *Laplacian operator*.
.. container:: enumeratevisibleitemswithsquare
* Use the OpenCV function :laplacian:`Laplacian <>` to implement a discrete analog of the *Laplacian operator*.
Theory

View File

@ -9,8 +9,10 @@ Goal
In this tutorial you will learn how to:
#. Use the OpenCV function :sobel:`Sobel <>` to calculate the derivatives from an image.
#. Use the OpenCV function :scharr:`Scharr <>` to calculate a more accurate derivative for a kernel of size :math:`3 \cdot 3`
.. container:: enumeratevisibleitemswithsquare
* Use the OpenCV function :sobel:`Sobel <>` to calculate the derivatives from an image.
* Use the OpenCV function :scharr:`Scharr <>` to calculate a more accurate derivative for a kernel of size :math:`3 \cdot 3`
Theory
========

View File

@ -8,25 +8,28 @@ Goal
In this tutorial you will learn how to:
* Use the OpenCV function :morphology_ex:`morphologyEx <>` to apply Morphological Transformation such as:
* Opening
* Closing
* Morphological Gradient
* Top Hat
* Black Hat
.. container:: enumeratevisibleitemswithsquare
Cool Theory
============
* Use the OpenCV function :morphology_ex:`morphologyEx <>` to apply Morphological Transformation such as:
+ Opening
+ Closing
+ Morphological Gradient
+ Top Hat
+ Black Hat
Theory
=======
.. note::
The explanation below belongs to the book **Learning OpenCV** by Bradski and Kaehler.
In the previous tutorial we covered two basic Morphology operations:
* Erosion
.. container:: enumeratevisibleitemswithsquare
* Dilation.
* Erosion
* Dilation.
Based on these two we can effectuate more sophisticated transformations to our images. Here we discuss briefly 05 operations offered by OpenCV:
@ -246,11 +249,11 @@ Explanation
* **dst**: Output image
* **operation**: The kind of morphology transformation to be performed. Note that we have 5 alternatives:
* *Opening*: MORPH_OPEN : 2
* *Closing*: MORPH_CLOSE: 3
* *Gradient*: MORPH_GRADIENT: 4
* *Top Hat*: MORPH_TOPHAT: 5
* *Black Hat*: MORPH_BLACKHAT: 6
+ *Opening*: MORPH_OPEN : 2
+ *Closing*: MORPH_CLOSE: 3
+ *Gradient*: MORPH_GRADIENT: 4
+ *Top Hat*: MORPH_TOPHAT: 5
+ *Black Hat*: MORPH_BLACKHAT: 6
As you can see the values range from <2-6>, that is why we add (+2) to the values entered by the Trackbar:

View File

@ -8,7 +8,9 @@ Goal
In this tutorial you will learn how to:
* Use the OpenCV functions :pyr_up:`pyrUp <>` and :pyr_down:`pyrDown <>` to downsample or upsample a given image.
.. container:: enumeratevisibleitemswithsquare
* Use the OpenCV functions :pyr_up:`pyrUp <>` and :pyr_down:`pyrDown <>` to downsample or upsample a given image.
Theory
=======
@ -16,25 +18,30 @@ Theory
.. note::
The explanation below belongs to the book **Learning OpenCV** by Bradski and Kaehler.
* Usually we need to convert an image to a size different than its original. For this, there are two possible options:
* *Upsize* the image (zoom in) or
* *Downsize* it (zoom out).
.. container:: enumeratevisibleitemswithsquare
* Usually we need to convert an image to a size different than its original. For this, there are two possible options:
#. *Upsize* the image (zoom in) or
#. *Downsize* it (zoom out).
* Although there is a *geometric transformation* function in OpenCV that -literally- resize an image (:resize:`resize <>`, which we will show in a future tutorial), in this section we analyze first the use of **Image Pyramids**, which are widely applied in a huge range of vision applications.
* Although there is a *geometric transformation* function in OpenCV that -literally- resize an image (:resize:`resize <>`, which we will show in a future tutorial), in this section we analyze first the use of **Image Pyramids**, which are widely applied in a huge range of vision applications.
Image Pyramid
--------------
* An image pyramid is a collection of images - all arising from a single original image - that are successively downsampled until some desired stopping point is reached.
.. container:: enumeratevisibleitemswithsquare
* There are two common kinds of image pyramids:
* An image pyramid is a collection of images - all arising from a single original image - that are successively downsampled until some desired stopping point is reached.
* **Gaussian pyramid:** Used to downsample images
* There are two common kinds of image pyramids:
* **Laplacian pyramid:** Used to reconstruct an upsampled image from an image lower in the pyramid (with less resolution)
* **Gaussian pyramid:** Used to downsample images
* In this tutorial we'll use the *Gaussian pyramid*.
* **Laplacian pyramid:** Used to reconstruct an upsampled image from an image lower in the pyramid (with less resolution)
* In this tutorial we'll use the *Gaussian pyramid*.
Gaussian Pyramid
^^^^^^^^^^^^^^^^^

View File

@ -8,7 +8,9 @@ Goal
In this tutorial you will learn how to:
* Perform basic thresholding operations using OpenCV function :threshold:`threshold <>`
.. container:: enumeratevisibleitemswithsquare
* Perform basic thresholding operations using OpenCV function :threshold:`threshold <>`
Cool Theory
@ -305,4 +307,4 @@ Results
.. image:: images/Threshold_Tutorial_Result_Zero.jpg
:alt: Threshold Result Zero
:align: center
:align: center