home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #3 / NN_1993_3.iso / spool / comp / softsys / khoros / 3290 < prev    next >
Encoding:
Text File  |  1993-01-22  |  5.2 KB  |  169 lines

  1. Newsgroups: comp.soft-sys.khoros
  2. Path: sparky!uunet!timbuk.cray.com!mmc.mmmg.com!mmm.serc.3m.com!news
  3. From: schultz@halley.est.3m.com (John C. Schultz)
  4. Subject: Bug? and correction in lvmdilate
  5. Message-ID: <SCHULTZ.93Jan22103126@halley.est.3m.com>
  6. Sender: news@mmm.serc.3m.com
  7. Organization: 3M Company, 3M Center, Minnesota, USA
  8. Distribution: comp
  9. Date: Fri, 22 Jan 93 16:35:09 GMT
  10. Lines: 157
  11.  
  12. lvmdilate.c (src/vipl/Lib) produces a result which is shifted wrt to
  13. the original image by 1/2 of the kernel dimensions.  This is a bug in
  14. my opinion.
  15.  
  16. The following diff can be applied with patch to fix lvmdilate.c
  17.  
  18. vmdilate will now work exactly for odd kernels and shift the image
  19. down and to the right by 1 pixel for even kernels.  Note that this may
  20. not be compatible with vmerode, vmcdilate, ... but the patched version
  21. is correct in IMHO.
  22.  
  23. e.g. 
  24.      00000                          00000              00000
  25.      00000     111                  01110              00000
  26.      00100   w 111  will generate   01110  rather than 00111
  27.      00000     111                  01110              00111
  28.      00000                          00000              00111
  29.  
  30.      00000                           00000
  31.      00000     1111                  01111
  32.      00100   w 1111  will generate   01111
  33.      00000     1111                  01111
  34.      00000                           00000
  35.  
  36.  
  37.  
  38.  
  39. *** /usr/khoros/src/vipl/Lib/lvmdilate.c    Fri Mar 20 17:04:10 1992
  40. --- lvmdilate.c    Fri Jan 22 10:05:34 1993
  41. ***************
  42. *** 209,215 ****
  43.       c3 = result;
  44.   
  45.       k = nc * nr;                                /* Normal operation count */
  46. !     for (j=0;j<k;j++) *(c3 +j)=0;
  47.   
  48.   
  49.       for (i=0;i<nr;i++) {
  50. --- 209,215 ----
  51.       c3 = result;
  52.   
  53.       k = nc * nr;                                /* Normal operation count */
  54. !     bzero(c3, k * sizeof(unsigned char));
  55.   
  56.   
  57.       for (i=0;i<nr;i++) {
  58. ***************
  59. *** 218,229 ****
  60.   
  61.               if (*(c1+i*nc+j) != 0) {
  62.              
  63. !                 for (ii=0;ii<kernr;ii++) {
  64.   
  65. -                     iii = i+ii+starti;
  66.                       if (iii<0 || iii>=nr) continue;
  67. !                     for (jj=0; jj<kernc; jj++) {
  68. !                         jjj = j+jj+startj;
  69.                           if ( jjj>=0 && jjj<nc ) 
  70.                              if (*(c2+ii*kernc+jj) != 0) 
  71.                                  *(c3+ iii*nc + jjj) = 255;
  72. --- 218,230 ----
  73.   
  74.               if (*(c1+i*nc+j) != 0) {
  75.              
  76. !                 for (ii = 0; ii < kernr; ii++) {
  77. !                     iii = i+ii+starti + ((kernr & 0X01) ? -kernr/2 : -kernc/2 + 1);
  78.   
  79.                       if (iii<0 || iii>=nr) continue;
  80. !                     for (jj = 0; jj < kernc; jj++) {
  81. !                         jjj = j+jj+startj + ((kernc & 0X01) ? -kernc/2 : -kernc/2 + 1);
  82.                           if ( jjj>=0 && jjj<nc ) 
  83.                              if (*(c2+ii*kernc+jj) != 0) 
  84.                                  *(c3+ iii*nc + jjj) = 255;
  85. ***************
  86. *** 234,240 ****
  87.           }
  88.       c1 = (unsigned char *) image->imagedata;
  89.       c3 = result;
  90. !     for (i=0;i<k;i++) *c1++ = *c3++;
  91.   
  92.   
  93.       free(result);
  94. --- 235,241 ----
  95.           }
  96.       c1 = (unsigned char *) image->imagedata;
  97.       c3 = result;
  98. !     bcopy(c3, c1, k * sizeof(unsigned char));
  99.   
  100.   
  101.       free(result);*** lvmdilate.c    Fri Jan 22 10:05:34 1993
  102. --- /usr/khoros/src/vipl/Lib/lvmdilate.c    Fri Mar 20 17:04:10 1992
  103. ***************
  104. *** 209,215 ****
  105.       c3 = result;
  106.   
  107.       k = nc * nr;                                /* Normal operation count */
  108. !     bzero(c3, k * sizeof(unsigned char));
  109.   
  110.   
  111.       for (i=0;i<nr;i++) {
  112. --- 209,215 ----
  113.       c3 = result;
  114.   
  115.       k = nc * nr;                                /* Normal operation count */
  116. !     for (j=0;j<k;j++) *(c3 +j)=0;
  117.   
  118.   
  119.       for (i=0;i<nr;i++) {
  120. ***************
  121. *** 218,230 ****
  122.   
  123.               if (*(c1+i*nc+j) != 0) {
  124.              
  125. !                 for (ii = 0; ii < kernr; ii++) {
  126. !                     iii = i+ii+starti + ((kernr & 0X01) ? -kernr/2 : -kernc/2 + 1);
  127.   
  128.                       if (iii<0 || iii>=nr) continue;
  129. !                     for (jj = 0; jj < kernc; jj++) {
  130. !                         jjj = j+jj+startj + ((kernc & 0X01) ? -kernc/2 : -kernc/2 + 1);
  131.                           if ( jjj>=0 && jjj<nc ) 
  132.                              if (*(c2+ii*kernc+jj) != 0) 
  133.                                  *(c3+ iii*nc + jjj) = 255;
  134. --- 218,229 ----
  135.   
  136.               if (*(c1+i*nc+j) != 0) {
  137.              
  138. !                 for (ii=0;ii<kernr;ii++) {
  139.   
  140. +                     iii = i+ii+starti;
  141.                       if (iii<0 || iii>=nr) continue;
  142. !                     for (jj=0; jj<kernc; jj++) {
  143. !                         jjj = j+jj+startj;
  144.                           if ( jjj>=0 && jjj<nc ) 
  145.                              if (*(c2+ii*kernc+jj) != 0) 
  146.                                  *(c3+ iii*nc + jjj) = 255;
  147. ***************
  148. *** 235,241 ****
  149.           }
  150.       c1 = (unsigned char *) image->imagedata;
  151.       c3 = result;
  152. !     bcopy(c3, c1, k * sizeof(unsigned char));
  153.   
  154.   
  155.       free(result);
  156. --- 234,240 ----
  157.           }
  158.       c1 = (unsigned char *) image->imagedata;
  159.       c3 = result;
  160. !     for (i=0;i<k;i++) *c1++ = *c3++;
  161.   
  162.   
  163.       free(result);
  164. --
  165.    John C. Schultz   +1 (612) 733-4047   schultz@halley.serc.3m.com
  166.    How to include the taste of Glendronach in a multi-media system?
  167.