From 96c824f375e1ae99c4aaae5ad051cb6902916b2e Mon Sep 17 00:00:00 2001 From: theodore Date: Tue, 24 Feb 2015 14:33:15 +0100 Subject: [PATCH] Morphology Lines Extraction Tutorial --- .../images/Morphology_3_Tutorial_Cover.jpg | Bin 0 -> 6688 bytes ...Distance_Transformation_Tutorial_Cover.jpg | Bin 0 -> 7702 bytes .../morph_lines_detection/images/binary.png | Bin 0 -> 3273 bytes .../morph_lines_detection/images/gray.png | Bin 0 -> 14650 bytes .../morph_lines_detection/images/horiz.png | Bin 0 -> 767 bytes .../images/linear_horiz.png | Bin 0 -> 1267 bytes .../images/linear_vert.png | Bin 0 -> 1491 bytes .../morph_lines_detection/images/morph12.gif | Bin 0 -> 2052 bytes .../morph_lines_detection/images/morph21.gif | Bin 0 -> 2428 bytes .../morph_lines_detection/images/morph211.png | Bin 0 -> 3374 bytes .../morph_lines_detection/images/morph6.gif | Bin 0 -> 4040 bytes .../morph_lines_detection/images/morph61.png | Bin 0 -> 5995 bytes .../morph_lines_detection/images/smooth.png | Bin 0 -> 4184 bytes .../morph_lines_detection/images/src.png | Bin 0 -> 14650 bytes .../morph_lines_detection/images/vert.png | Bin 0 -> 2394 bytes .../moprh_lines_detection.md | 86 ++++++++++++ .../imgproc/table_of_content_imgproc.markdown | 8 ++ .../tutorial_code/ImgProc/Morphology_3.cpp | 127 ++++++++++++++++++ samples/data/notes.png | Bin 0 -> 14650 bytes 19 files changed, 221 insertions(+) create mode 100644 doc/tutorials/imgproc/images/Morphology_3_Tutorial_Cover.jpg create mode 100644 doc/tutorials/imgproc/images/imgtrans/Distance_Transformation_Tutorial_Cover.jpg create mode 100644 doc/tutorials/imgproc/morph_lines_detection/images/binary.png create mode 100644 doc/tutorials/imgproc/morph_lines_detection/images/gray.png create mode 100644 doc/tutorials/imgproc/morph_lines_detection/images/horiz.png create mode 100644 doc/tutorials/imgproc/morph_lines_detection/images/linear_horiz.png create mode 100644 doc/tutorials/imgproc/morph_lines_detection/images/linear_vert.png create mode 100644 doc/tutorials/imgproc/morph_lines_detection/images/morph12.gif create mode 100644 doc/tutorials/imgproc/morph_lines_detection/images/morph21.gif create mode 100644 doc/tutorials/imgproc/morph_lines_detection/images/morph211.png create mode 100644 doc/tutorials/imgproc/morph_lines_detection/images/morph6.gif create mode 100644 doc/tutorials/imgproc/morph_lines_detection/images/morph61.png create mode 100644 doc/tutorials/imgproc/morph_lines_detection/images/smooth.png create mode 100644 doc/tutorials/imgproc/morph_lines_detection/images/src.png create mode 100644 doc/tutorials/imgproc/morph_lines_detection/images/vert.png create mode 100644 doc/tutorials/imgproc/morph_lines_detection/moprh_lines_detection.md create mode 100644 samples/cpp/tutorial_code/ImgProc/Morphology_3.cpp create mode 100644 samples/data/notes.png diff --git a/doc/tutorials/imgproc/images/Morphology_3_Tutorial_Cover.jpg b/doc/tutorials/imgproc/images/Morphology_3_Tutorial_Cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1eddc17554ef55371cb3fca5620d6653e7265859 GIT binary patch literal 6688 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 F{{djBtJ?qo literal 0 HcmV?d00001 diff --git a/doc/tutorials/imgproc/images/imgtrans/Distance_Transformation_Tutorial_Cover.jpg b/doc/tutorials/imgproc/images/imgtrans/Distance_Transformation_Tutorial_Cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8effc42a042bb2d4c2fc606e2c3cc3824aac8ce9 GIT binary patch literal 7702 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 literal 0 HcmV?d00001 diff --git a/doc/tutorials/imgproc/morph_lines_detection/images/binary.png b/doc/tutorials/imgproc/morph_lines_detection/images/binary.png new file mode 100644 index 0000000000000000000000000000000000000000..f1e41468e3dcda24dc69629e3940484904fc42b8 GIT binary patch literal 3273 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 Kdc9i5G3tMu-TrX^ literal 0 HcmV?d00001 diff --git a/doc/tutorials/imgproc/morph_lines_detection/images/gray.png b/doc/tutorials/imgproc/morph_lines_detection/images/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..1535bbbb219e5057df7b144b4ee971deaa20eef2 GIT binary patch literal 14650 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 QobKxVyUMbKDC6h<3yX(yBme*a literal 0 HcmV?d00001 diff --git a/doc/tutorials/imgproc/morph_lines_detection/images/horiz.png b/doc/tutorials/imgproc/morph_lines_detection/images/horiz.png new file mode 100644 index 0000000000000000000000000000000000000000..c34ce999e57e7e9d7592b2ad8ce13077e4da041f GIT binary patch literal 767 zcmeAS@N?(olHy`uVBq!ia0y~yU;#22+Blei+gMr~MlWWtpwJvX%SQ!4O2Rvu1aR1G;AcvXZfI#>An{T-p4%l>? zgN(xhcoN*R7#Qr7oy}HAxlgv?$T@fW=bSg2>sC&1V==h=>n&4(>{{^^NlXk6ywfC{ zJIqUY4W>N<1vOUCp!X=Bfx*N3)Z4|gYIpMfzkj4WGDd^puF&>=2c5O-O*3ka@T*s7vwGQCo4R^+!5|u6JTJ5G44)EYpsG;fS)(7U$kiclxXwmLE!al-c-m zlUZ56Y1XyumeW~Bqi?b?BowOsZnOBNCKc|GrhIgHa(EO+J27% y!)uMDE2c48cmRWJDI|7Oy_W%pQO z30MM@0Fw$x30Of!ORxn}0L@-7b$5KR<_|2LD7$mMzj4)*|>C=n6N zm{JNee+xusc>sVs&#_o6pp?RDwYvI??shwDHk*r63 zk|dEdOBS6XVz^|6r!~r zJDj_qME;)~K0iO>{rw$jn%1t$woRK+P#Wi!)%n%OzJ7+ZZ}#8zdX0loXP+$xuEDQQ zbzSSrR8)t<0ZJ*PX^Jom;W!TRJU?2-w0B(>X_}7kPUfSQw7_vPRiA6l2Y{j|;5bg_ z@|Ps7>GRyAJsb|uTAzF`00y^Z()R1yzSZsMc^;xDg4PAJ2&QB)hcQ7L;(yRLrP9v#P#IF8FwwyF7?`Q3G0iQ~9drZxLE z)919Mey6stnLc+vpl%TPI-f=33Sietj^kJWNF2wKrm1MHTiaIKwe{1rv9{Z-XsyNb zyxw!#=5k4rl(B5L+t$9#^f_&*pE>CDT@NtZt9d=6I?bdV?x;K-+itgm>$=cdvpk)F zFbokz5%N4op65uC1i*2r>^KgBAV3fVST2_*Pm`#}c*l!&W`sp!l%{C_>ZNX$Wumn{ zx=)M7Xxddlfg|nNCO6X3bXBjspS#6%+luM*#Tv_!v75`Ucy!%jvEpvu(Rf%x0VF@_qeqKbZzzh?=<} z3EQ04mZYYQ`Jw4j0E8Q9o`xoD*K*wM(`DOs=jqIkjI=K=FP%s4Tbe=~W5m!*zI$B{ z_Y%XmFGM{(J>l)`?I&WHeH>%N&`j7NG3@ty*tQMZwy!eU-s`rwRSZ8?9$#w*m}4Bb zh~ZR;dn$%ol*sq8Ev^y6)yrcdx*aAh(abPuXKL({kH*7WJ~MXdc`0xCOdro_iGC3# z?Tnd`(%ilof}`yGDU|<%i{`5OVgJ5cKnAz>^!5E6Ehg&!0adMMBrazs5*3GrW3CG&4+EqM2dR63q;gmS|>}v_vz*q$QdeCN0s- dFlmWq<}aMY^#;%#bC>`C002ovPDHLkV1lRiZdU*R literal 0 HcmV?d00001 diff --git a/doc/tutorials/imgproc/morph_lines_detection/images/linear_vert.png b/doc/tutorials/imgproc/morph_lines_detection/images/linear_vert.png new file mode 100644 index 0000000000000000000000000000000000000000..79a03ceeb472c973bc02c788d0d833fe75517e02 GIT binary patch literal 1491 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 literal 0 HcmV?d00001 diff --git a/doc/tutorials/imgproc/morph_lines_detection/images/morph21.gif b/doc/tutorials/imgproc/morph_lines_detection/images/morph21.gif new file mode 100644 index 0000000000000000000000000000000000000000..22c5f08cdc4c88de75c7c16b6f868ed6f33ebf7d GIT binary patch literal 2428 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 BSf&5~ literal 0 HcmV?d00001 diff --git a/doc/tutorials/imgproc/morph_lines_detection/images/morph6.gif b/doc/tutorials/imgproc/morph_lines_detection/images/morph6.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9181511904b5f8077fa5ef992da1e66e197d088 GIT binary patch literal 4040 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 B<RaKTFC!r@n5QO}`ysSEc;KL;n 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 QobKxVyUMbKDC6h<3yX(yBme*a literal 0 HcmV?d00001 diff --git a/doc/tutorials/imgproc/morph_lines_detection/images/vert.png b/doc/tutorials/imgproc/morph_lines_detection/images/vert.png new file mode 100644 index 0000000000000000000000000000000000000000..1bbd7e778a7d8a8f8c70167359f4438d16799ca2 GIT binary patch literal 2394 zcmcIl_dgW=AAjE&XC9%9_)=sRLK$ZqPRRV05s|Y$hn&6TB%_j(?0HJGgsiwamn~$U zm7J83oSls0!+-Go<@KR+Hu&_+dSWu5#RzD-VKmg#a#|+7kgP#U~g>H<}wF=8$p6W^|QR4>vZYqa| z-92Y6C7m@+YcmDmzfp~6;e2?Zcl}WnvVY4$7})G=_A?Iv zNcKsGQr#E10EpuQ$AQ($D991y2bm**7CWT)l100#HHK71ZnFXqB-1Ja_5z>)DcHq^ zo0R)&ZxUk-JL>D|Doek|Lwcvh%8j+5##w5rM$b>&?;I5*T$qT~3t7=5|*)aDKw+6^^LM!48@zTo-yyPCg*97t2By*-8sNK@eR7=$pU z|I|kVfHcLk0ox!zm5?$MOFD++3t2z&bPMZruwQNrGb<=HmS@Io`v?VhBCJ5v9@!>*U1~;D6}`!8C>DS)t;$?Fafk_oD+3SYd?Jjd|jB{QkGabESwc;!p1@@r*_jv zGoSzbQfz5T3Gy!o(wPmk5gv7Wz2NeE1p~2*wMubR<{7grN^Aip*nj2(VHOiYjLtfk zofEwoP%ye+NVN9}?BIaeb`Aaz7axeVH(vLFq++(3_MWB0Z%oUp!n4Mg z&hvXNek`gb;uYxB>Ma!gR(Z2BG@t#8q2rQagmHP`x9s@|e^em~R;B7QH=m}ayDstg zYV*{j!{`^S?@gi*uXA(u7*D;9#Qa))(o{(D6HnqWD)k}c+FBUHha47(?O8Zkx98_% z?M6wTlh*JEL0PM5G1XtAOsCu}<|5_kn`e}(3juGY{C|td)K2bvwL$meX<*-hUbK_d zmBU)GRIs`+@=M~?k8yY!;)K!p0fEQa6GB;VbMD*0f6FM7P6j#Vdl4||52m@TqR^rn zR}u8wq>?`0uI-Kc;zOL$EsjWD$KOk0y~ zzSD+phO5QvAW!TE$?t7kUlkz92K4ORQE#*2DE{kz;5)N#n~|ycn7B<_fudB-c}~jp=dVy4XIg9y z+iYGGXEwLpB9}*Y7Vl~%lJIZUKf(CaE64vhgX0Lx-?G`;3;jSX&p%>rQRW8F;<5r%>eIaCI z@!&GSU4BFL)d1fiD#QEv2|ZtO6)nxb1P57TFh*uIPUp@bG-+1cal!7eDguEH|0D zXx+0;2wWA|<-q?EPqXk$WLQO|re|Ygbt~@P^A+B9f_{_UkG3HQgg=>l%Zx`eyxq-F zmB_R(WFpreG!Eb!NjmL(8tAhd0c$CLq9+sk>m5itYjAQv*6j_Ze&x_IU+vxDE68YbwhDq5>3y7Q=>Exr9C!Vtpq;V(HSa3ia}*R z4B#l?FoN~$u&ewnD3B;QDh?N0vd=BhuNvxV?>4-UMoy6817z%%TG0Qfm5HpzReBv~ zAf@Td45?hgK&XuRl6vewERkISBC60CCB^~3cVZoTs(W;B0$9lAgISV)8sbVZyE}v? yj$1f$=0=HzPk9YU)P`n-9Hip#cpU#<`uLYiPy3`2up}lQCo(oLN4?cU-~AUl)Ftl# literal 0 HcmV?d00001 diff --git a/doc/tutorials/imgproc/morph_lines_detection/moprh_lines_detection.md b/doc/tutorials/imgproc/morph_lines_detection/moprh_lines_detection.md new file mode 100644 index 000000000..ee74e8798 --- /dev/null +++ b/doc/tutorials/imgproc/morph_lines_detection/moprh_lines_detection.md @@ -0,0 +1,86 @@ +Extract horizontal and vertical lines by using morphological operations {#tutorial_moprh_lines_detection} +============= + +Goal +---- + +In this tutorial you will learn how to: + +- Apply two very common morphology operators (i.e. Dilation and Erosion), with the creation of custom kernels, in order to extract straight lines on the horizontal and vertical axes. For this purpose, you will use the following OpenCV functions: + - @ref cv::erode + - @ref cv::dilate + - @ref cv::getStructuringElement + + in an example where your goal will be to extract the music notes from a music sheet. + +Theory +------ + +### Morphology Operations +Morphology is a set of image processing operations that process images based on predefined *structuring elements* known also as kernels. The value of each pixel in the output image is based on a comparison of the corresponding pixel in the input image with its neighbors. By choosing the size and shape of the kernel, you can construct a morphological operation that is sensitive to specific shapes regarding the input image. + +Two of the most basic morphological operations are dilation and erosion. Dilation adds pixels to the boundaries of the object in an image, while erosion does exactly the opposite. The amount of pixels added or removed, respectively depends on the size and shape of the structuring element used to process the image. In general the rules followed from these two operations have as follows: + +- __Dilation__: The value of the output pixel is the maximum value of all the pixels that fall within the structuring element's size and shape. For example in a binary image, if any of the pixels of the input image falling within the range of the kernel is set to the value 1, the corresponding pixel of the output image will be set to 1 as well. The latter applies to any type of image (e.g. grayscale, rgb, etc). + + ![Dilation on a Binary Image](images/morph21.gif) + + ![Dilation on a Grayscale Image](images/morph6.gif) + +- __Erosion__: The vise versa applies for the erosion operation. The value of the output pixel is the minimum value of all the pixels that fall within the structuring element's size and shape. Look the at the example figures below: + + ![Erosion on a Binary Image](images/morph211.png) + + ![Erosion on a Grayscale Image](images/morph61.png) + +### Structuring Elements + +As it can be seen above and in general in any morphological operation the structuring element used to probe the input image, is the most important part. + +A structuring element is a matrix consisting of only 0's and 1's that can have any arbitrary shape and size. Typically are much smaller than the image being processed, while the pixels with values of 1 define the neighborhood. The center pixel of the structuring element, called the origin, identifies the pixel of interest -- the pixel being processed. + +For example, the following illustrates a diamond-shaped structuring element of 7x7 size. + +![A Diamond-Shaped Structuring Element and its Origin](images/morph12.gif) + +A structuring element can have many common shapes, such as lines, diamonds, disks, periodic lines, and circles and sizes. You typically choose a structuring element the same size and shape as the objects you want to process/extract in the input image. For example, to find lines in an image, create a linear structuring element as you will see later. + +Code +---- + +This tutorial code's is shown lines below. You can also download it from [here](https://github.com/Itseez/opencv/tree/master/samples/cpp/tutorial_code/ImgProc/Morphology_3.cpp). +@includelineno samples/cpp/tutorial_code/ImgProc/Morphology_3.cpp + +Explanation / Result +-------------------- + +-# Load the source image and check if it is loaded without any problem, then show it: + @snippet samples/cpp/tutorial_code/ImgProc/Morphology_3.cpp load_image + ![](images/src.png) + +-# Then transform image to grayscale if it not already: + @snippet samples/cpp/tutorial_code/ImgProc/Morphology_3.cpp gray + ![](images/gray.png) + +-# Afterwards transform grayscale image to binary. Notice the ~ symbol which indicates that we use the inverse (i.e. bitwise_not) version of it: + @snippet samples/cpp/tutorial_code/ImgProc/Morphology_3.cpp bin + ![](images/binary.png) + +-# Now we are ready to apply morphological operations in order to extract the horizontal and vertical lines and as a consequence to separate the the music notes from the music sheet, but first let's initialize the output images that we will use for that reason: + @snippet samples/cpp/tutorial_code/ImgProc/Morphology_3.cpp init + +-# As we specified in the theory in order to extract the object that we desire, we need to create the corresponding structure element. Since here we want to extract the horizontal lines, a corresponding structure element for that purpose will have the following shape: + ![](images/linear_horiz.png) + and in the source code this is represented by the following code snippet: + @snippet samples/cpp/tutorial_code/ImgProc/Morphology_3.cpp horiz + ![](images/horiz.png) + +-# The same applies for the vertical lines, with the corresponding structure element: + ![](images/linear_vert.png) + and again this is represented as follows: + @snippet samples/cpp/tutorial_code/ImgProc/Morphology_3.cpp vert + ![](images/vert.png) + +-# As you can see we are almost there. However, at that point you will notice that the edges of the notes are a bit rough. For that reason we need to refine the edges in order to obtain a smoother result: + @snippet samples/cpp/tutorial_code/ImgProc/Morphology_3.cpp smooth + ![](images/smooth.png) diff --git a/doc/tutorials/imgproc/table_of_content_imgproc.markdown b/doc/tutorials/imgproc/table_of_content_imgproc.markdown index 615da7003..77de126c2 100644 --- a/doc/tutorials/imgproc/table_of_content_imgproc.markdown +++ b/doc/tutorials/imgproc/table_of_content_imgproc.markdown @@ -27,6 +27,14 @@ In this section you will learn about the image processing (manipulation) functio Here we investigate different morphology operators +- @subpage tutorial_moprh_lines_detection + + *Compatibility:* \> OpenCV 2.0 + + *Author:* Theodore Tsesmelis + + Here we will show how we can use different morphology operators to extract horizontal and vertical lines + - @subpage tutorial_pyramids *Compatibility:* \> OpenCV 2.0 diff --git a/samples/cpp/tutorial_code/ImgProc/Morphology_3.cpp b/samples/cpp/tutorial_code/ImgProc/Morphology_3.cpp new file mode 100644 index 000000000..fa70e697f --- /dev/null +++ b/samples/cpp/tutorial_code/ImgProc/Morphology_3.cpp @@ -0,0 +1,127 @@ +/** + * @file Morphology_3(Extract_Lines).cpp + * @brief Use morphology transformations for extracting horizontal and vertical lines sample code + * @author OpenCV team + */ + +#include +#include + +using namespace std; +using namespace cv; + +int main(int, char** argv) +{ +//! [load_image] + // Load the image + Mat src = imread(argv[1]); + + // Check if image is loaded fine + if(!src.data) + cerr << "Problem loading image!!!" << endl; + + // Show source image + imshow("src", src); +//! [load_image] + +//! [gray] + // Transform source image to gray if it is not + Mat gray; + + if (src.channels() == 3) + { + cvtColor(src, gray, CV_BGR2GRAY); + } + else + { + gray = src; + } + + // Show gray image + imshow("gray", gray); +//! [gray] + +//! [bin] + // Apply adaptiveThreshold at the bitwise_not of gray, notice the ~ symbol + Mat bw; + adaptiveThreshold(~gray, bw, 255, CV_ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2); + + // Show binary image + imshow("binary", bw); +//! [bin] + +//! [init] + // Create the images that will use to extract the horizontal and vertical lines + Mat horizontal = bw.clone(); + Mat vertical = bw.clone(); +//! [init] + +//! [horiz] + // Specify size on horizontal axis + int horizontalsize = horizontal.cols / 30; + + // Create structure element for extracting horizontal lines through morphology operations + Mat horizontalStructure = getStructuringElement(MORPH_RECT, Size(horizontalsize,1)); + + // Apply morphology operations + erode(horizontal, horizontal, horizontalStructure, Point(-1, -1)); + dilate(horizontal, horizontal, horizontalStructure, Point(-1, -1)); + + // Show extracted horizontal lines + imshow("horizontal", horizontal); +//! [horiz] + +//! [vert] + // Specify size on vertical axis + int verticalsize = vertical.rows / 30; + + // Create structure element for extracting vertical lines through morphology operations + Mat verticalStructure = getStructuringElement(MORPH_RECT, Size( 1,verticalsize)); + + // Apply morphology operations + erode(vertical, vertical, verticalStructure, Point(-1, -1)); + dilate(vertical, vertical, verticalStructure, Point(-1, -1)); + + // Show extracted vertical lines + imshow("vertical", vertical); +//! [vert] + +//! [smooth] + // Inverse vertical image + bitwise_not(vertical, vertical); + imshow("vertical_bit", vertical); + + // Extract edges and smooth image according to the logic + // 1. extract edges + // 2. dilate(edges) + // 3. src.copyTo(smooth) + // 4. blur smooth img + // 5. smooth.copyTo(src, edges) + + // Step 1 + Mat edges; + adaptiveThreshold(vertical, edges, 255, CV_ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 3, -2); + imshow("edges", edges); + + // Step 2 + Mat kernel = Mat::ones(2, 2, CV_8UC1); + dilate(edges, edges, kernel); + imshow("dilate", edges); + + // Step 3 + Mat smooth; + vertical.copyTo(smooth); + + // Step 4 + blur(smooth, smooth, Size(2, 2)); + + // Step 5 + smooth.copyTo(vertical, edges); + + // Show final result + imshow("smooth", vertical); +//! [smooth] + + waitKey(0); + return 0; +} \ No newline at end of file diff --git a/samples/data/notes.png b/samples/data/notes.png new file mode 100644 index 0000000000000000000000000000000000000000..1535bbbb219e5057df7b144b4ee971deaa20eef2 GIT binary patch literal 14650 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 QobKxVyUMbKDC6h<3yX(yBme*a literal 0 HcmV?d00001