1 /*M/////////////////////////////////////////////////////////////////////////////////////// 2 // 3 // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 4 // 5 // By downloading, copying, installing or using the software you agree to this license. 6 // If you do not agree to this license, do not download, install, 7 // copy or use the software. 8 // 9 // 10 // Intel License Agreement 11 // For Open Source Computer Vision Library 12 // 13 // Copyright (C) 2000, Intel Corporation, all rights reserved. 14 // Third party copyrights are property of their respective owners. 15 // 16 // Redistribution and use in source and binary forms, with or without modification, 17 // are permitted provided that the following conditions are met: 18 // 19 // * Redistribution's of source code must retain the above copyright notice, 20 // this list of conditions and the following disclaimer. 21 // 22 // * Redistribution's in binary form must reproduce the above copyright notice, 23 // this list of conditions and the following disclaimer in the documentation 24 // and/or other materials provided with the distribution. 25 // 26 // * The name of Intel Corporation may not be used to endorse or promote products 27 // derived from this software without specific prior written permission. 28 // 29 // This software is provided by the copyright holders and contributors "as is" and 30 // any express or implied warranties, including, but not limited to, the implied 31 // warranties of merchantability and fitness for a particular purpose are disclaimed. 32 // In no event shall the Intel Corporation or contributors be liable for any direct, 33 // indirect, incidental, special, exemplary, or consequential damages 34 // (including, but not limited to, procurement of substitute goods or services; 35 // loss of use, data, or profits; or business interruption) however caused 36 // and on any theory of liability, whether in contract, strict liability, 37 // or tort (including negligence or otherwise) arising in any way out of 38 // the use of this software, even if advised of the possibility of such damage. 39 // 40 //M*/ 41 #include "_cvaux.h" 42 #include "_cvvm.h" 43 44 /* Valery Mosyagin */ 45 46 static CvStatus 47 icvFindRuns( int numLines, /* number of scanlines */ 48 uchar * prewarp_1, /* prewarp image 1 */ 49 uchar * prewarp_2, /* prewarp image 2 */ 50 int *line_lens_1, /* line lengths 1 */ 51 int *line_lens_2, /* line lengths 2 */ 52 int *runs_1, /* result runs 1 */ 53 int *runs_2, /* result runs 2 */ 54 int *num_runs_1, /* numbers of first runs */ 55 int *num_runs_2 ) 56 { 57 CvStatus err; 58 59 err = icvFindRunsInOneImage( numLines, prewarp_1, line_lens_1, runs_1, num_runs_1 ); 60 61 if( err != CV_NO_ERR ) 62 return err; 63 64 err = icvFindRunsInOneImage( numLines, prewarp_2, line_lens_2, runs_2, num_runs_2 ); 65 66 return err; 67 68 } 69 70 71 /*======================================================================================*/ 72 73 CV_INLINE int 74 icvGetColor( uchar * valueRGB ) 75 { 76 int R = *valueRGB; 77 int G = *(valueRGB + 1); 78 int B = *(valueRGB + 2); 79 80 return ( ((R + G + B) >> 3) & 0xFFFC ); 81 } /* vm_GetColor */ 82 83 84 /*======================================================================================*/ 85 86 CvStatus 87 icvFindRunsInOneImage( int numLines, /* number of scanlines */ 88 uchar * prewarp, /* prewarp image */ 89 int *line_lens, /* line lengths in pixels */ 90 int *runs, /* result runs */ 91 int *num_runs ) 92 { 93 int epiLine; 94 int run_index; 95 int curr_color; 96 int index; 97 int color; 98 uchar *curr_point; 99 int num; 100 101 102 run_index = 0; 103 104 curr_point = prewarp; 105 106 for( epiLine = 0; epiLine < numLines; epiLine++ ) 107 { 108 109 curr_color = icvGetColor( curr_point ); 110 111 runs[run_index++] = 0; 112 runs[run_index++] = curr_color; 113 114 curr_point += 3; 115 116 num = 1; 117 for( index = 1; index < line_lens[epiLine]; index++ ) 118 { 119 120 color = icvGetColor( curr_point ); 121 122 if( color != curr_color ) 123 { 124 runs[run_index++] = index; 125 runs[run_index++] = color; 126 curr_color = color; 127 num++; 128 } 129 130 curr_point += 3; 131 } 132 133 runs[run_index++] = index; 134 num_runs[epiLine] = num; 135 } 136 137 return CV_NO_ERR; 138 } 139 140 141 /*======================================================================================*/ 142 143 CV_IMPL void 144 cvFindRuns( int numLines, /* number of scanlines */ 145 uchar * prewarp_1, /* prewarp image 1 */ 146 uchar * prewarp_2, /* prewarp image 2 */ 147 int *line_lens_1, /* line lengths 1 */ 148 int *line_lens_2, /* line lengths 2 */ 149 int *runs_1, /* result runs 1 */ 150 int *runs_2, /* result runs 2 */ 151 int *num_runs_1, /* numbers of first runs */ 152 int *num_runs_2 ) 153 { 154 CV_FUNCNAME( "cvFindRuns" ); 155 __BEGIN__; 156 157 IPPI_CALL( icvFindRuns( numLines, /* number of scanlines */ 158 prewarp_1, /* prewarp image 1 */ 159 prewarp_2, /* prewarp image 2 */ 160 line_lens_1, /* line lengths 1 */ 161 line_lens_2, /* line lengths 2 */ 162 runs_1, /* result runs 1 */ 163 runs_2, /* result runs 2 */ 164 num_runs_1, /* numbers of first runs */ 165 num_runs_2 )); 166 __CLEANUP__; 167 __END__; 168 } 169