fixed building PDFs in master
authorVadim Pisarevsky <vadim.pisarevsky@gmail.com>
Mon, 26 Nov 2012 16:40:45 +0000 (20:40 +0400)
committerVadim Pisarevsky <vadim.pisarevsky@gmail.com>
Mon, 26 Nov 2012 16:40:45 +0000 (20:40 +0400)
doc/tutorials/core/basic_geometric_drawing/basic_geometric_drawing.rst
doc/tutorials/core/basic_linear_transform/basic_linear_transform.rst
doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.rst

index be0016b..361d1ee 100644 (file)
@@ -31,15 +31,15 @@ Point
 
 .. code-block:: cpp
 
-   Point pt;
-   pt.x = 10;
-   pt.y = 8;
+     Point pt;
+     pt.x = 10;
+     pt.y = 8;
 
 or
 
 .. code-block:: cpp
 
-   Point pt =  Point(10, 8);
+     Point pt =  Point(10, 8);
 
 Scalar
 -------
@@ -49,7 +49,7 @@ Scalar
 
   .. code-block:: cpp
 
-     Scalar( a, b, c )
+       Scalar( a, b, c )
 
   We would be defining a RGB color such as: *Red = c*, *Green = b* and *Blue = a*
 
@@ -65,51 +65,51 @@ Explanation
 
    .. code-block:: cpp
 
-      /// Windows names
-      char atom_window[] = "Drawing 1: Atom";
-      char rook_window[] = "Drawing 2: Rook";
+          /// Windows names
+          char atom_window[] = "Drawing 1: Atom";
+          char rook_window[] = "Drawing 2: Rook";
 
-      /// Create black empty images
-      Mat atom_image = Mat::zeros( w, w, CV_8UC3 );
-      Mat rook_image = Mat::zeros( w, w, CV_8UC3 );
+          /// Create black empty images
+          Mat atom_image = Mat::zeros( w, w, CV_8UC3 );
+          Mat rook_image = Mat::zeros( w, w, CV_8UC3 );
 
 #. We created functions to draw different geometric shapes. For instance, to draw the atom we used *MyEllipse* and *MyFilledCircle*:
 
    .. code-block:: cpp
 
-      /// 1. Draw a simple atom:
+          /// 1. Draw a simple atom:
 
-      /// 1.a. Creating ellipses
-      MyEllipse( atom_image, 90 );
-      MyEllipse( atom_image, 0 );
-      MyEllipse( atom_image, 45 );
-      MyEllipse( atom_image, -45 );
+          /// 1.a. Creating ellipses
+          MyEllipse( atom_image, 90 );
+          MyEllipse( atom_image, 0 );
+          MyEllipse( atom_image, 45 );
+          MyEllipse( atom_image, -45 );
 
-      /// 1.b. Creating circles
-      MyFilledCircle( atom_image, Point( w/2.0, w/2.0) );
+          /// 1.b. Creating circles
+          MyFilledCircle( atom_image, Point( w/2.0, w/2.0) );
 
 #. And to draw the rook we employed *MyLine*, *rectangle* and a *MyPolygon*:
 
    .. code-block:: cpp
 
-      /// 2. Draw a rook
+          /// 2. Draw a rook
 
-      /// 2.a. Create a convex polygon
-      MyPolygon( rook_image );
+          /// 2.a. Create a convex polygon
+          MyPolygon( rook_image );
 
-      /// 2.b. Creating rectangles
-      rectangle( rook_image,
-             Point( 0, 7*w/8.0 ),
-             Point( w, w),
-             Scalar( 0, 255, 255 ),
-             -1,
-             8 );
+          /// 2.b. Creating rectangles
+          rectangle( rook_image,
+                 Point( 0, 7*w/8.0 ),
+                 Point( w, w),
+                 Scalar( 0, 255, 255 ),
+                 -1,
+                 8 );
 
-      /// 2.c. Create a few lines
-      MyLine( rook_image, Point( 0, 15*w/16 ), Point( w, 15*w/16 ) );
-      MyLine( rook_image, Point( w/4, 7*w/8 ), Point( w/4, w ) );
-      MyLine( rook_image, Point( w/2, 7*w/8 ), Point( w/2, w ) );
-      MyLine( rook_image, Point( 3*w/4, 7*w/8 ), Point( 3*w/4, w ) );
+          /// 2.c. Create a few lines
+          MyLine( rook_image, Point( 0, 15*w/16 ), Point( w, 15*w/16 ) );
+          MyLine( rook_image, Point( w/4, 7*w/8 ), Point( w/4, w ) );
+          MyLine( rook_image, Point( w/2, 7*w/8 ), Point( w/2, w ) );
+          MyLine( rook_image, Point( 3*w/4, 7*w/8 ), Point( 3*w/4, w ) );
 
 #. Let's check what is inside each of these functions:
 
@@ -117,17 +117,15 @@ Explanation
 
      .. code-block:: cpp
 
-        void MyLine( Mat img, Point start, Point end )
-    {
-      int thickness = 2;
-      int lineType = 8;
-      line( img,
-        start,
-        end,
-        Scalar( 0, 0, 0 ),
-        thickness,
-        lineType );
-    }
+          void MyLine( Mat img, Point start, Point end )
+          {
+              int thickness = 2;
+              int lineType = 8;
+              line( img, start, end,
+                    Scalar( 0, 0, 0 ),
+                    thickness,
+                    lineType );
+          }
 
      As we can see, *MyLine* just call the function :line:`line <>`, which does the following:
 
@@ -143,32 +141,32 @@ Explanation
 
      .. code-block:: cpp
 
-        void MyEllipse( Mat img, double angle )
-        {
-      int thickness = 2;
-      int lineType = 8;
-
-      ellipse( img,
-           Point( w/2.0, w/2.0 ),
-           Size( w/4.0, w/16.0 ),
-           angle,
-           0,
-           360,
-           Scalar( 255, 0, 0 ),
-           thickness,
-           lineType );
-        }
+          void MyEllipse( Mat img, double angle )
+          {
+              int thickness = 2;
+              int lineType = 8;
+
+              ellipse( img,
+                 Point( w/2.0, w/2.0 ),
+                 Size( w/4.0, w/16.0 ),
+                 angle,
+                 0,
+                 360,
+                 Scalar( 255, 0, 0 ),
+                 thickness,
+                 lineType );
+          }
 
      From the code above, we can observe that the function :ellipse:`ellipse <>` draws an ellipse such that:
 
      .. container:: enumeratevisibleitemswithsquare
 
-        * The ellipse is displayed in the image **img**
-        * The ellipse center is located in the point **(w/2.0, w/2.0)** and is enclosed in a box of size **(w/4.0, w/16.0)**
-        * The ellipse is rotated **angle** degrees
-        * The ellipse extends an arc between **0** and **360** degrees
-        * The color of the figure will be **Scalar( 255, 255, 0)** which means blue in RGB value.
-        * The ellipse's **thickness** is 2.
+         * The ellipse is displayed in the image **img**
+         * The ellipse center is located in the point **(w/2.0, w/2.0)** and is enclosed in a box of size **(w/4.0, w/16.0)**
+         * The ellipse is rotated **angle** degrees
+         * The ellipse extends an arc between **0** and **360** degrees
+         * The color of the figure will be **Scalar( 255, 255, 0)** which means blue in RGB value.
+         * The ellipse's **thickness** is 2.
 
 
    * *MyFilledCircle*
@@ -176,17 +174,17 @@ Explanation
      .. code-block:: cpp
 
         void MyFilledCircle( Mat img, Point center )
-    {
-     int thickness = -1;
-     int lineType = 8;
-
-     circle( img,
-         center,
-         w/32.0,
-         Scalar( 0, 0, 255 ),
-         thickness,
-         lineType );
-    }
+        {
+            int thickness = -1;
+            int lineType = 8;
+
+            circle( img,
+                center,
+                w/32.0,
+                Scalar( 0, 0, 255 ),
+                thickness,
+                lineType );
+        }
 
      Similar to the ellipse function, we can observe that *circle* receives as arguments:
 
@@ -202,43 +200,43 @@ Explanation
 
      .. code-block:: cpp
 
-        void MyPolygon( Mat img )
-    {
-      int lineType = 8;
-
-      /** Create some points */
-      Point rook_points[1][20];
-      rook_points[0][0] = Point( w/4.0, 7*w/8.0 );
-      rook_points[0][1] = Point( 3*w/4.0, 7*w/8.0 );
-      rook_points[0][2] = Point( 3*w/4.0, 13*w/16.0 );
-      rook_points[0][3] = Point( 11*w/16.0, 13*w/16.0 );
-      rook_points[0][4] = Point( 19*w/32.0, 3*w/8.0 );
-      rook_points[0][5] = Point( 3*w/4.0, 3*w/8.0 );
-      rook_points[0][6] = Point( 3*w/4.0, w/8.0 );
-      rook_points[0][7] = Point( 26*w/40.0, w/8.0 );
-      rook_points[0][8] = Point( 26*w/40.0, w/4.0 );
-      rook_points[0][9] = Point( 22*w/40.0, w/4.0 );
-      rook_points[0][10] = Point( 22*w/40.0, w/8.0 );
-      rook_points[0][11] = Point( 18*w/40.0, w/8.0 );
-      rook_points[0][12] = Point( 18*w/40.0, w/4.0 );
-      rook_points[0][13] = Point( 14*w/40.0, w/4.0 );
-      rook_points[0][14] = Point( 14*w/40.0, w/8.0 );
-      rook_points[0][15] = Point( w/4.0, w/8.0 );
-      rook_points[0][16] = Point( w/4.0, 3*w/8.0 );
-      rook_points[0][17] = Point( 13*w/32.0, 3*w/8.0 );
-      rook_points[0][18] = Point( 5*w/16.0, 13*w/16.0 );
-      rook_points[0][19] = Point( w/4.0, 13*w/16.0) ;
-
-      const Point* ppt[1] = { rook_points[0] };
-      int npt[] = { 20 };
-
-      fillPoly( img,
-                ppt,
-                npt,
-                    1,
-                Scalar( 255, 255, 255 ),
-                lineType );
-         }
+          void MyPolygon( Mat img )
+          {
+              int lineType = 8;
+
+              /** Create some points */
+              Point rook_points[1][20];
+              rook_points[0][0] = Point( w/4.0, 7*w/8.0 );
+              rook_points[0][1] = Point( 3*w/4.0, 7*w/8.0 );
+              rook_points[0][2] = Point( 3*w/4.0, 13*w/16.0 );
+              rook_points[0][3] = Point( 11*w/16.0, 13*w/16.0 );
+              rook_points[0][4] = Point( 19*w/32.0, 3*w/8.0 );
+              rook_points[0][5] = Point( 3*w/4.0, 3*w/8.0 );
+              rook_points[0][6] = Point( 3*w/4.0, w/8.0 );
+              rook_points[0][7] = Point( 26*w/40.0, w/8.0 );
+              rook_points[0][8] = Point( 26*w/40.0, w/4.0 );
+              rook_points[0][9] = Point( 22*w/40.0, w/4.0 );
+              rook_points[0][10] = Point( 22*w/40.0, w/8.0 );
+              rook_points[0][11] = Point( 18*w/40.0, w/8.0 );
+              rook_points[0][12] = Point( 18*w/40.0, w/4.0 );
+              rook_points[0][13] = Point( 14*w/40.0, w/4.0 );
+              rook_points[0][14] = Point( 14*w/40.0, w/8.0 );
+              rook_points[0][15] = Point( w/4.0, w/8.0 );
+              rook_points[0][16] = Point( w/4.0, 3*w/8.0 );
+              rook_points[0][17] = Point( 13*w/32.0, 3*w/8.0 );
+              rook_points[0][18] = Point( 5*w/16.0, 13*w/16.0 );
+              rook_points[0][19] = Point( w/4.0, 13*w/16.0) ;
+
+              const Point* ppt[1] = { rook_points[0] };
+              int npt[] = { 20 };
+
+              fillPoly( img,
+                        ppt,
+                        npt,
+                            1,
+                        Scalar( 255, 255, 255 ),
+                        lineType );
+          }
 
      To draw a filled polygon we use the function :fill_poly:`fillPoly <>`. We note that:
 
@@ -254,12 +252,11 @@ Explanation
 
      .. code-block:: cpp
 
-        rectangle( rook_image,
-               Point( 0, 7*w/8.0 ),
-               Point( w, w),
-               Scalar( 0, 255, 255 ),
-               -1,
-               8 );
+          rectangle( rook_image,
+                     Point( 0, 7*w/8.0 ),
+                     Point( w, w),
+                     Scalar( 0, 255, 255 ),
+                     -1, 8 );
 
      Finally we have the :rectangle:`rectangle <>` function (we did not create a special function for this guy). We note that:
 
index 613f4e1..4c2fb70 100644 (file)
@@ -11,17 +11,15 @@ In this tutorial you will learn how to:
 .. container:: enumeratevisibleitemswithsquare
 
    + Access pixel values
-
    + Initialize a matrix with zeros
-
    + Learn what :saturate_cast:`saturate_cast <>` does and why it is useful
-
    + Get some cool info about pixel transformations
 
 Theory
 =======
 
 .. note::
+
    The explanation below belongs to the book `Computer Vision: Algorithms and Applications <http://szeliski.org/Book/>`_  by Richard Szeliski
 
 Image Processing
@@ -38,7 +36,7 @@ Image Processing
 
 
 Pixel Transforms
-^^^^^^^^^^^^^^^^^
+-----------------
 
 .. container:: enumeratevisibleitemswithsquare
 
@@ -47,7 +45,7 @@ Pixel Transforms
    * Examples of such operators include *brightness and contrast adjustments* as well as color correction and transformations.
 
 Brightness and contrast adjustments
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+------------------------------------
 
 .. container:: enumeratevisibleitemswithsquare
 
@@ -70,9 +68,7 @@ Brightness and contrast adjustments
 Code
 =====
 
-.. container:: enumeratevisibleitemswithsquare
-
-   * The following code performs the operation :math:`g(i,j) = \alpha \cdot f(i,j) + \beta` :
+* The following code performs the operation :math:`g(i,j) = \alpha \cdot f(i,j) + \beta` :
 
 .. code-block:: cpp
 
@@ -87,38 +83,37 @@ Code
 
    int main( int argc, char** argv )
    {
-    /// Read image given by user
-    Mat image = imread( argv[1] );
-    Mat new_image = Mat::zeros( image.size(), image.type() );
-
-    /// Initialize values
-    std::cout<<" Basic Linear Transforms "<<std::endl;
-    std::cout<<"-------------------------"<<std::endl;
-    std::cout<<"* Enter the alpha value [1.0-3.0]: ";std::cin>>alpha;
-    std::cout<<"* Enter the beta value [0-100]: "; std::cin>>beta;
-
-    /// Do the operation new_image(i,j) = alpha*image(i,j) + beta
-    for( int y = 0; y < image.rows; y++ )
-       { for( int x = 0; x < image.cols; x++ )
-            { for( int c = 0; c < 3; c++ )
-                 {
-         new_image.at<Vec3b>(y,x)[c] =
-            saturate_cast<uchar>( alpha*( image.at<Vec3b>(y,x)[c] ) + beta );
-                }
-       }
+       /// Read image given by user
+       Mat image = imread( argv[1] );
+       Mat new_image = Mat::zeros( image.size(), image.type() );
+
+       /// Initialize values
+       std::cout<<" Basic Linear Transforms "<<std::endl;
+       std::cout<<"-------------------------"<<std::endl;
+       std::cout<<"* Enter the alpha value [1.0-3.0]: ";std::cin>>alpha;
+       std::cout<<"* Enter the beta value [0-100]: "; std::cin>>beta;
+
+       /// Do the operation new_image(i,j) = alpha*image(i,j) + beta
+       for( int y = 0; y < image.rows; y++ ) {
+           for( int x = 0; x < image.cols; x++ ) {
+               for( int c = 0; c < 3; c++ ) {
+                   new_image.at<Vec3b>(y,x)[c] =
+                   saturate_cast<uchar>( alpha*( image.at<Vec3b>(y,x)[c] ) + beta );
+               }
+           }
        }
 
-    /// Create Windows
-    namedWindow("Original Image", 1);
-    namedWindow("New Image", 1);
+       /// Create Windows
+       namedWindow("Original Image", 1);
+       namedWindow("New Image", 1);
 
-    /// Show stuff
-    imshow("Original Image", image);
-    imshow("New Image", new_image);
+       /// Show stuff
+       imshow("Original Image", image);
+       imshow("New Image", new_image);
 
-    /// Wait until user press some key
-    waitKey();
-    return 0;
+       /// Wait until user press some key
+       waitKey();
+       return 0;
    }
 
 Explanation
@@ -155,13 +150,14 @@ Explanation
 
    .. code-block:: cpp
 
-      for( int y = 0; y < image.rows; y++ )
-         { for( int x = 0; x < image.cols; x++ )
-              { for( int c = 0; c < 3; c++ )
-                   { new_image.at<Vec3b>(y,x)[c] =
-                               saturate_cast<uchar>( alpha*( image.at<Vec3b>(y,x)[c] ) + beta ); }
-         }
-         }
+      for( int y = 0; y < image.rows; y++ ) {
+          for( int x = 0; x < image.cols; x++ ) {
+              for( int c = 0; c < 3; c++ ) {
+                  new_image.at<Vec3b>(y,x)[c] =
+                    saturate_cast<uchar>( alpha*( image.at<Vec3b>(y,x)[c] ) + beta );
+              }
+          }
+      }
 
    Notice the following:
 
@@ -209,6 +205,6 @@ Result
 
 * We get this:
 
-.. image:: images/Basic_Linear_Transform_Tutorial_Result_0.jpg
-   :alt: Basic Linear Transform - Final Result
-   :align: center
+  .. image:: images/Basic_Linear_Transform_Tutorial_Result_0.jpg
+     :alt: Basic Linear Transform - Final Result
+     :align: center
index 77b44f1..ff5a4d9 100644 (file)
@@ -39,7 +39,7 @@ Morphological Operations
      :align: center
 
 Dilation
-^^^^^^^^^
+~~~~~~~~
 
 * This operations consists of convoluting an image :math:`A` with some kernel (:math:`B`), which can have any shape or size, usually a square or circle.
 
@@ -54,7 +54,7 @@ Dilation
 The background (bright) dilates around the black regions of the letter.
 
 Erosion
-^^^^^^^^
+~~~~~~~
 
 * This operation is the sister of dilation. What this does is to compute a local minimum over the area of the kernel.
 
@@ -216,17 +216,17 @@ Explanation
 
         .. code-block:: cpp
 
-       Mat element = getStructuringElement( erosion_type,
-                                    Size( 2*erosion_size + 1, 2*erosion_size+1 ),
-                                Point( erosion_size, erosion_size ) );
+            Mat element = getStructuringElement( erosion_type,
+                                          Size( 2*erosion_size + 1, 2*erosion_size+1 ),
+                                          Point( erosion_size, erosion_size ) );
 
        We can choose any of three shapes for our kernel:
 
        .. container:: enumeratevisibleitemswithsquare
 
-      + Rectangular box: MORPH_RECT
-      + Cross:  MORPH_CROSS
-      + Ellipse: MORPH_ELLIPSE
+           + 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.