OSDN Git Service

Add new functions v2.0.25p0005
authorTakuo Yasunaga <yasunaga@bio.kyutech.ac.jp>
Thu, 31 Jul 2014 18:16:17 +0000 (03:16 +0900)
committerTakuo Yasunaga <yasunaga@bio.kyutech.ac.jp>
Thu, 31 Jul 2014 18:16:17 +0000 (03:16 +0900)
modified:   hostdepend/X86MAC64/bin/X86MAC64/mrcImageEdgeEnhancement
modified:   hostdepend/X86MAC64/bin/X86MAC64/mrcImageSmoothing

modified:   include/lmrcImageEdgeEnhancement.h

  Add Negative Laplacian
modified:   src/Objects/DataManip/mrcImage/src/lmrcImageEdgeEnhancement.c
modified:   src/Objects/DataManip/mrcImage/src/lmrcImageEdgeEnhancement.h
modified:   src/Objects/DataManip/mrcImage/src/lmrcImageNegativeLaplacian.c

  Add Weighted Mean Filter
modified:   src/Objects/DataManip/mrcImage/src/lmrcImageSmoothing.c

21 files changed:
hostdepend/X86MAC64/bin/X86MAC64/mrcImageEdgeEnhancement
hostdepend/X86MAC64/bin/X86MAC64/mrcImageSmoothing
hostdepend/X86MAC64/lib/X86MAC64/libEosObjects.a
hostdepend/X86MAC64/lib/X86MAC64/libmrcImage.a
hostdepend/X86MAC64/lib/X86MAC64/shared/lmrcImageEdgeEnhancement.sharedo
hostdepend/X86MAC64/lib/X86MAC64/shared/lmrcImageNegativeLaplacian.sharedo
hostdepend/X86MAC64/lib/X86MAC64/shared/lmrcImageSmoothing.sharedo
hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/libmrcImage.a
hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/libmrcImage.debug.a
hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/lmrcImageEdgeEnhancement.sharedo
hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/lmrcImageNegativeLaplacian.sharedo
hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/lmrcImageSmoothing.sharedo
hostdepend/X86MAC64/src/Tools/mrcImage/mrcImageEdgeEnhancement/src/X86MAC64/mrcImageEdgeEnhancement
hostdepend/X86MAC64/src/Tools/mrcImage/mrcImageSmoothing/src/X86MAC64/mrcImageSmoothing
include/lmrcImageEdgeEnhancement.h
src/Objects/DataManip/mrcImage/src/lmrcImageEdgeEnhancement.c
src/Objects/DataManip/mrcImage/src/lmrcImageEdgeEnhancement.h
src/Objects/DataManip/mrcImage/src/lmrcImageNegativeLaplacian.c
src/Objects/DataManip/mrcImage/src/lmrcImageSmoothing.c
src/Tools/mrcImage/mrcImageEdgeEnhancement/src/mrcImageEdgeEnhancement.html
src/Tools/mrcImage/mrcImageSmoothing/src/mrcImageSmoothing.html

index 007f171..4ee26c7 100755 (executable)
Binary files a/hostdepend/X86MAC64/bin/X86MAC64/mrcImageEdgeEnhancement and b/hostdepend/X86MAC64/bin/X86MAC64/mrcImageEdgeEnhancement differ
index f0fadc4..ef28fe9 100755 (executable)
Binary files a/hostdepend/X86MAC64/bin/X86MAC64/mrcImageSmoothing and b/hostdepend/X86MAC64/bin/X86MAC64/mrcImageSmoothing differ
index cc6c7be..67d3646 100644 (file)
Binary files a/hostdepend/X86MAC64/lib/X86MAC64/libEosObjects.a and b/hostdepend/X86MAC64/lib/X86MAC64/libEosObjects.a differ
index 7cf38c3..915dc4a 100644 (file)
Binary files a/hostdepend/X86MAC64/lib/X86MAC64/libmrcImage.a and b/hostdepend/X86MAC64/lib/X86MAC64/libmrcImage.a differ
index 6f242c3..b8e477f 100644 (file)
Binary files a/hostdepend/X86MAC64/lib/X86MAC64/shared/lmrcImageEdgeEnhancement.sharedo and b/hostdepend/X86MAC64/lib/X86MAC64/shared/lmrcImageEdgeEnhancement.sharedo differ
index 4b00bad..57cddb6 100644 (file)
Binary files a/hostdepend/X86MAC64/lib/X86MAC64/shared/lmrcImageNegativeLaplacian.sharedo and b/hostdepend/X86MAC64/lib/X86MAC64/shared/lmrcImageNegativeLaplacian.sharedo differ
index 5948b8b..fcf212f 100644 (file)
Binary files a/hostdepend/X86MAC64/lib/X86MAC64/shared/lmrcImageSmoothing.sharedo and b/hostdepend/X86MAC64/lib/X86MAC64/shared/lmrcImageSmoothing.sharedo differ
index 7cf38c3..915dc4a 100644 (file)
Binary files a/hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/libmrcImage.a and b/hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/libmrcImage.a differ
index ed8cadc..d9f7c10 100644 (file)
Binary files a/hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/libmrcImage.debug.a and b/hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/libmrcImage.debug.a differ
index 6f242c3..b8e477f 100644 (file)
Binary files a/hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/lmrcImageEdgeEnhancement.sharedo and b/hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/lmrcImageEdgeEnhancement.sharedo differ
index 4b00bad..57cddb6 100644 (file)
Binary files a/hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/lmrcImageNegativeLaplacian.sharedo and b/hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/lmrcImageNegativeLaplacian.sharedo differ
index 5948b8b..fcf212f 100644 (file)
Binary files a/hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/lmrcImageSmoothing.sharedo and b/hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/lmrcImageSmoothing.sharedo differ
index 007f171..4ee26c7 100755 (executable)
Binary files a/hostdepend/X86MAC64/src/Tools/mrcImage/mrcImageEdgeEnhancement/src/X86MAC64/mrcImageEdgeEnhancement and b/hostdepend/X86MAC64/src/Tools/mrcImage/mrcImageEdgeEnhancement/src/X86MAC64/mrcImageEdgeEnhancement differ
index f0fadc4..ef28fe9 100755 (executable)
Binary files a/hostdepend/X86MAC64/src/Tools/mrcImage/mrcImageSmoothing/src/X86MAC64/mrcImageSmoothing and b/hostdepend/X86MAC64/src/Tools/mrcImage/mrcImageSmoothing/src/X86MAC64/mrcImageSmoothing differ
index 0d7bfc8..8e378d2 100644 (file)
@@ -25,7 +25,8 @@ typedef enum lmrcImageEdgeEnhancementMode {
        lmrcImageEdegeEnhancementModePrewittSQRT,
        lmrcImageEdegeEnhancementModePrewittABS,
        lmrcImageEdegeEnhancementModeSobelSQRT,
-       lmrcImageEdegeEnhancementModeSobelABS
+       lmrcImageEdegeEnhancementModeSobelABS,
+       lmrcImageEdegeEnhancementModeNegativeLaplacian
 } lmrcImageEdgeEnhancementMode;
 
 
@@ -65,7 +66,7 @@ extern void lmrcImageEdgeEnhancementPrewittOperatorABS(mrcImage* out, mrcImage*
 extern void lmrcImageEdgeEnhancementSobelOperatorSQRT(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
 extern void lmrcImageEdgeEnhancementSobelOperatorABS(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
 
-
+extern void lmrcImageEdgeEnhancementNegativeLaplacian(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
 /* prototype end */
 
 #ifdef __cplusplus
index 631dbee..37bfcfa 100644 (file)
@@ -27,6 +27,7 @@ lmrcImageEdgeEnhancementModePrint(FILE* fpt)
        fprintf(stderr, "mode: %d : %s\n", lmrcImageEdegeEnhancementModePrewittABS, "Prewitt(ABS)");
        fprintf(stderr, "mode: %d : %s\n", lmrcImageEdegeEnhancementModeSobelSQRT, "Sobel(SQRT)");
        fprintf(stderr, "mode: %d : %s\n", lmrcImageEdegeEnhancementModeSobelABS, "Sobel(ABS)");
+       fprintf(stderr, "mode: %d : %s\n", lmrcImageEdegeEnhancementModeNegativeLaplacian, "NegativeLaplacian");
 }
 
 void
index 0d7bfc8..8e378d2 100644 (file)
@@ -25,7 +25,8 @@ typedef enum lmrcImageEdgeEnhancementMode {
        lmrcImageEdegeEnhancementModePrewittSQRT,
        lmrcImageEdegeEnhancementModePrewittABS,
        lmrcImageEdegeEnhancementModeSobelSQRT,
-       lmrcImageEdegeEnhancementModeSobelABS
+       lmrcImageEdegeEnhancementModeSobelABS,
+       lmrcImageEdegeEnhancementModeNegativeLaplacian
 } lmrcImageEdgeEnhancementMode;
 
 
@@ -65,7 +66,7 @@ extern void lmrcImageEdgeEnhancementPrewittOperatorABS(mrcImage* out, mrcImage*
 extern void lmrcImageEdgeEnhancementSobelOperatorSQRT(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
 extern void lmrcImageEdgeEnhancementSobelOperatorABS(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
 
-
+extern void lmrcImageEdgeEnhancementNegativeLaplacian(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
 /* prototype end */
 
 #ifdef __cplusplus
index b7d88e6..504a7e6 100644 (file)
@@ -71,10 +71,56 @@ lmrcImageEdgeEnhancementNegativeLaplacian(mrcImage* out, mrcImage* in, lmrcImage
                                        break;
                                }
                                case 1: { /* 18-neighbor */
-                                       dst = -1*src012 -1*src102  -1*src112 -1*src122 -1*src212
-                                                 -1*src011 -1*src101 +18*src111 -1*src121 -1*src211 -1*src001 -1*src021 -1*src201 -1*src221 
-                                                 -1*src010 -1*src100  -1*src110 -1*src120 -1*src210
+                                   /*
+                                                   122  
+                                               012 112 212
+                                                   102  
 
+                                               021 121 221
+                                               011 111 211
+                                               001 101 201
+
+                                                   120  
+                                               010 110 210
+                                                   100 
+                                       */
+                                       dst =           -1*src122 
+                                             -1*src012 -1*src112 -1*src212 
+                                                           -1*src102
+                                             -1*src021 -1*src121 -1*src221 
+                                                 -1*src011           -1*src211
+                                                 -1*src001 -1*src101 -1*src201
+                                                       -1*src120 
+                                                 -1*src010 -1*src110 -1*src210 
+                                                           -1*src100
+                                                 +18*src111 ;
+                                       break;
+                               }
+                               case 2: { /* 26-neighbor */
+                                   /*
+                                               022 122 222
+                                               012 112 212
+                                               002 102 202
+
+                                               021 121 221
+                                               011 111 211
+                                               001 101 201
+
+                                               020 120 220
+                                               010 110 210
+                                               000 100 200
+
+                                       */
+                                       dst = +1*src022 -1*src122 +1*src222
+                                             -1*src012 -1*src112 -1*src212 
+                                                 +1*src002 -1*src102 +1*src202
+                                             -1*src021 -1*src121 -1*src211
+                                                 -1*src011           -1*src211 
+                                                 -1*src001 -1*src101 -1*src201
+                                                 +1*src020 -1*src120 +1*src220
+                                                 -1*src010 -1*src110 -1*src210 
+                                                 +1*src000 -1*src100 +1*src200
+                                                 +10*src111 ;
                                        break;
                                }
                                default: {
index 5c0777a..b332482 100755 (executable)
@@ -17,6 +17,7 @@ static void __lmrcImageSmoothingMedianFilter(mrcImage* dst, mrcImage* src, lmrcI
 static void __lmrcImageSmoothingMeanFilter(mrcImage *dst, mrcImage *src, lmrcImageSmoothingInfo *info, long mode);
 static void __lmrcImageSmoothingSurfaceFitFilter(mrcImage *dst, mrcImage *src, lmrcImageSmoothingInfo *info, long mode);
 static void __lmrcImageSmoothingLeeSigmaFilter(mrcImage *dst, mrcImage *src, lmrcImageSmoothingInfo *info, long mode);
+static void __lmrcImageSmoothingLocalWeightedMeanFilter(mrcImage *dst, mrcImage *src, lmrcImageSmoothingInfo *info, long mode);
 
 void 
 lmrcImageSmoothingModeInfo(FILE* fpt) 
@@ -25,6 +26,7 @@ lmrcImageSmoothingModeInfo(FILE* fpt)
     fprintf(fpt, "    2: Mean filter \n");
     fprintf(fpt, "    3: Surface Fit filter\n");
     fprintf(fpt, "    4: Lee-Sigma filter\n");
+    fprintf(fpt, "    5: Local weighted mean filter\n");
     fprintf(fpt, ">>> Mode2 <<<< \n");
     fprintf(fpt, "    0: Kernel is cube. : required argumnent: -sx, -sy, [-sz]\n");
     fprintf(fpt, "    1: Kernel is sphere.(Only mode 1 supported) : required argumnent: -r \n");
@@ -49,6 +51,10 @@ lmrcImageSmoothing(mrcImage* dst, mrcImage* src, lmrcImageSmoothingInfo* info, l
                        DEBUGPRINT("__lmrcImageSmoothingLeeSigmaFilter\n");
                    __lmrcImageSmoothingLeeSigmaFilter(dst, src, info, mode);
                    break;
+               case 5: /* Local Weighted Mean Filtering */
+                       DEBUGPRINT("__lmrcImageSmoothingLocalWeightedMeanFilter\n");
+                   __lmrcImageSmoothingLocalWeightedMeanFilter(dst, src, info, mode);
+                   break;
                default:  {
                        fprintf(stderr, "Not supported mode in lmrcImageSmoothing: %ld\n", info->mode);
                        lmrcImageSmoothingModeInfo(stderr);
@@ -64,7 +70,7 @@ __lmrcImageSmoothingLeeSigmaFilter(mrcImage* dst, mrcImage* src, lmrcImageSmooth
        long n, i, index, center ,lsx ,lsy ,lsz;
        float x, y, z ,r2, rr;
        float tmpx, tmpy, tmpz;
-       long offsetx, offsety, offsetz;
+       int offsetx, offsety, offsetz;
        double data;
        float* kernel; 
        float* kernel2; 
@@ -151,7 +157,7 @@ __lmrcImageSmoothingLeeSigmaFilter(mrcImage* dst, mrcImage* src, lmrcImageSmooth
                                break;
                        }
                        default: {
-                               fprintf(stderr, "Not supported mode: %d\n", mode);
+                               fprintf(stderr, "Not supported mode: %ld\n", mode);
                                exit(EXIT_FAILURE);
                                break;
                        }
@@ -385,6 +391,84 @@ __lmrcImageSmoothingMeanFilter(mrcImage* dst, mrcImage* src, lmrcImageSmoothingI
        }
 }
 
+void 
+__lmrcImageSmoothingLocalWeightedMeanFilter(mrcImage* dst, mrcImage* src, lmrcImageSmoothingInfo* info, long mode)
+{
+       long n, index;
+       float x, y, z;
+       float tmpx, tmpy, tmpz;
+       long offsetx, offsety, offsetz ,lsx ,lsy ,lsz;
+       double data, sum, sumW, W; 
+
+       if (mode==0){
+         lsx=floor(info->sx+0.5);
+         lsy=floor(info->sy+0.5);
+         lsz=floor(info->sz+0.5);
+         if(IsOdd(lsx)) {
+           offsetx = (lsx - 1)/2;
+         } else {
+           fprintf(stderr, "Not supported kernel size: sx = %ld\n", lsx);
+           exit(EXIT_FAILURE);
+         }
+         if(IsOdd(lsy)) {
+           offsety = (lsy - 1)/2;
+         } else {
+           fprintf(stderr, "Not supported kernel size: sy = %ld\n", lsy);
+           exit(EXIT_FAILURE);
+         }
+         if(IsOdd(lsz)) {
+           offsetz = (lsz - 1)/2;
+         } else {
+         fprintf(stderr, "Not supported kernel size: sz = %ld\n", lsz);
+         }
+         n = lsx*lsy*lsz;
+       }
+       if(src->HeaderN.z!=1) {
+               if(IsOdd(lsz)) {
+                       offsetz = (lsz - 1)/2;
+               } else {
+                       fprintf(stderr, "Not supported kernel size: sz = %ld\n", lsz);
+               }
+               n = n*lsz;
+       }
+       DEBUGPRINT5("x: %ld %ld y: %ld %ld datapoints: %ld\n", offsetx, lsx, offsety, lsy, n);
+       dst->Header = src->Header;
+       mrcInit(dst, NULL);     
+       for(z = 0; z < src->HeaderN.z; z++) {
+       for(y = 0; y < src->HeaderN.y; y++) {
+       for(x = 0; x < src->HeaderN.x; x++) {
+               if(x < offsetx 
+               || y < offsety 
+               || z < offsetz 
+               || src->HeaderN.x-1-offsetx<x
+               || src->HeaderN.y-1-offsety<y 
+               || src->HeaderN.z-1-offsetz<z ) {                               
+                       mrcPixelDataGet(src, x, y, 0.0, &data, mrcPixelRePart, mrcPixelHowNearest);
+                       mrcPixelDataSet(dst, x, y, 0.0,  data, mrcPixelRePart);
+               } else {
+                       index = 0;      
+                       sum  = 0.0;
+                       sumW = 0.0;
+                       for(tmpz=z-offsetz; tmpz<=z+offsetz; tmpz++) {
+                       for(tmpy=y-offsety; tmpy<=y+offsety; tmpy++) {
+                       for(tmpx=x-offsetx; tmpx<=x+offsetx; tmpx++) {
+                               W = (offsetx - fabs(tmpx - x) + 1)
+                                  *(offsety - fabs(tmpy - y) + 1)
+                                  *(offsetz - fabs(tmpz - z) + 1); 
+                               mrcPixelDataGet(src, tmpx, tmpy, tmpz, &data, mrcPixelRePart, mrcPixelHowNearest);
+                               sum  += data*W;
+                               sumW += W;
+                       }
+                       }
+                       }
+                       data = sum / sumW;
+                       mrcPixelDataSet(dst, x, y, tmpz, data, mrcPixelRePart);
+               }
+       }
+       }
+       }
+}
+
 static long int __SumOfSquare(long int);
 static long int __SumOfSquareSquare(long int n, long int m);
 static long int __SumOf4(long int n);
index 9a86669..6ff7c44 100755 (executable)
@@ -23,6 +23,7 @@ mode: 4 : Prewitt(SQRT)
 mode: 5 : Prewitt(ABS)
 mode: 6 : Sobel(SQRT)
 mode: 7 : Sobel(ABS)
+mode: 8 : NegativeLaplacian
 </PRE>
 </BODY>
 </HTML>
index b4cfafb..219199b 100755 (executable)
@@ -24,6 +24,7 @@ Options:
     2: Mean filter 
     3: Surface Fit filter
     4: Lee-Sigma filter
+    5: Local weighted mean filter
 >>> Mode2 <<<< 
     0: Kernel is cube. : required argumnent: -sx, -sy, [-sz]
     1: Kernel is sphere.(Only mode 1 supported) : required argumnent: -r