@@ -84,7 +84,7 @@ DkPolyRect DkPageSegmentation::getMaxRect() const {
8484// return mImg; // no document page found
8585// }
8686
87- void DkPageSegmentation::compute () {
87+ void DkPageSegmentation::compute (bool useLab ) {
8888
8989 // compute scale factor
9090 int maxImgSide = std::max (mImg .rows , mImg .cols );
@@ -97,7 +97,20 @@ void DkPageSegmentation::compute() {
9797 if (scale > 0 .8f || scale <= 0 .0f )
9898 scale = 1 .0f ;
9999
100- findRectanglesLab (mImg , mRects );
100+ if (useLab)
101+ findRectanglesLab (mImg , mRects );
102+ else {
103+ cv::Mat imgLab;
104+ cv::cvtColor (mImg , imgLab, CV_RGB2Lab); // luminance channel is better than grayscale
105+
106+ int ch[] = {0 , 0 };
107+ cv::Mat imgL (mImg .size (), CV_8UC1);
108+ mixChannels (&imgLab, 1 , &imgL, 1 , ch, 1 );
109+ cv::normalize (imgL, imgL, 255 , 0 , cv::NORM_MINMAX);
110+ imgLab.release (); // early release
111+
112+ findRectangles (imgL, mRects );
113+ }
101114
102115
103116 std::cout << " [DkPageSegmentation] " << mRects .size () << " rectangles found resize factor: " << scale << std::endl;
@@ -123,8 +136,8 @@ void DkPageSegmentation::findRectanglesLab(const cv::Mat & img, std::vector<DkPo
123136
124137void DkPageSegmentation::findRectangles (const cv::Mat& img, std::vector<DkPolyRect>& rects) const {
125138
126- cv::Mat imgL;
127- cv::normalize (img, imgL, 255 , 0 , cv::NORM_MINMAX);
139+ cv::Mat imgL;
140+ cv::normalize (img, imgL, 255 , 0 , cv::NORM_MINMAX);
128141
129142 // downscale
130143 if (scale != 1 .0f )
@@ -411,13 +424,13 @@ void DkPageSegmentation::draw(cv::Mat& img, const std::vector<DkPolyRect>& rects
411424 }
412425}
413426
414- std::vector<DkPolyRect> DkPageSegmentation::apply (const cv::Mat& src) {
427+ std::vector<DkPolyRect> DkPageSegmentation::apply (const cv::Mat& src, bool useLab ) {
415428
416429 std::vector<DkPolyRect> pageRects;
417430
418431 // run the page segmentation
419432 DkPageSegmentation segM (src);
420- segM.compute ();
433+ segM.compute (useLab );
421434 segM.filterDuplicates ();
422435
423436 // pageRects = segM.getRects();
0 commit comments