OSDN Git Service

Updated: HoughTransform
authorTakuo Yasunaga <yasunaga@bio.kyutech.ac.jp>
Tue, 30 Dec 2014 04:29:35 +0000 (13:29 +0900)
committerTakuo Yasunaga <yasunaga@bio.kyutech.ac.jp>
Tue, 30 Dec 2014 04:29:35 +0000 (13:29 +0900)
22 files changed:
bin/wish/Display2/tclIndex
hostdepend/X86MAC64/bin/X86MAC64/mrcImageHoughTransform
hostdepend/X86MAC64/lib/X86MAC64/libEosObjects.a
hostdepend/X86MAC64/lib/X86MAC64/libmrcImage.a
hostdepend/X86MAC64/lib/X86MAC64/shared/lmrcImageHoughTransform.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/lmrcImageHoughTransform.sharedo
hostdepend/X86MAC64/src/Tools/mrcImage/mrcImageHoughTransform/src/X86MAC64/mrcImageHoughTransform
include/lmrcImageHoughTransform.h
src/Objects/DataManip/mrcImage/src/.lmrcImageHoughTransform.c.swp [new file with mode: 0644]
src/Objects/DataManip/mrcImage/src/lmrcImageHoughTransform.c
src/Objects/DataManip/mrcImage/src/lmrcImageHoughTransform.h
src/Tools/Config/Define.inc
src/Tools/mrcImage/mrcImageHoughTransform/Config/OptionControlFile
src/Tools/mrcImage/mrcImageHoughTransform/inc/mrcImageHoughTransform.h
src/Tools/mrcImage/mrcImageHoughTransform/src/argCheck.c
src/Tools/mrcImage/mrcImageHoughTransform/src/init.c
src/Tools/mrcImage/mrcImageHoughTransform/src/mrcImageHoughTransform.c
src/Tools/mrcImage/mrcImageHoughTransform/src/mrcImageHoughTransform.html
src/Tools/mrcImage/mrcImageHoughTransform/src/mrcImageHoughTransform.pane
src/Tools/mrcImage/mrcImageHoughTransform/src/usage.c

index 75a715a..8fd9302 100644 (file)
@@ -49,6 +49,7 @@ set auto_index(menuMultiRoiOKCommand) [list source [file join $dir Display2MenuR
 set auto_index(menuMultiRoiAllDeleteCommand) [list source [file join $dir Display2MenuROI.wish]]
 set auto_index(menuMultiRoiDeleteCommand) [list source [file join $dir Display2MenuROI.wish]]
 set auto_index(menuEditCreate) [list source [file join $dir Display2MenuROI.wish]]
+set auto_index(fft2dCmd) [list source [file join $dir fft2dCmd.wish]]
 set auto_index(layerLineRecreate) [list source [file join $dir LayerLineUtil.wish]]
 set auto_index(layerLineCreate) [list source [file join $dir LayerLineUtil.wish]]
 set auto_index(layerLineClear) [list source [file join $dir LayerLineUtil.wish]]
@@ -131,4 +132,3 @@ set auto_index(sectionClearAll) [list source [file join $dir SectionUtil.wish]]
 set auto_index(sectionClear) [list source [file join $dir SectionUtil.wish]]
 set auto_index(sectionChange) [list source [file join $dir SectionUtil.wish]]
 set auto_index(unitCellRecreate) [list source [file join $dir UnitCell.wish]]
-set auto_index(fft2dCmd) [list source [file join $dir fft2dCmd.wish]]
index 8d6d950..18010a3 100755 (executable)
Binary files a/hostdepend/X86MAC64/bin/X86MAC64/mrcImageHoughTransform and b/hostdepend/X86MAC64/bin/X86MAC64/mrcImageHoughTransform differ
index 9fb0334..68d6d1f 100644 (file)
Binary files a/hostdepend/X86MAC64/lib/X86MAC64/libEosObjects.a and b/hostdepend/X86MAC64/lib/X86MAC64/libEosObjects.a differ
index 162330a..f961535 100644 (file)
Binary files a/hostdepend/X86MAC64/lib/X86MAC64/libmrcImage.a and b/hostdepend/X86MAC64/lib/X86MAC64/libmrcImage.a differ
index 4ed8700..2a36a7a 100644 (file)
Binary files a/hostdepend/X86MAC64/lib/X86MAC64/shared/lmrcImageHoughTransform.sharedo and b/hostdepend/X86MAC64/lib/X86MAC64/shared/lmrcImageHoughTransform.sharedo differ
index 162330a..f961535 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 c847b22..06aa857 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 4ed8700..2a36a7a 100644 (file)
Binary files a/hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/lmrcImageHoughTransform.sharedo and b/hostdepend/X86MAC64/src/Objects/DataManip/mrcImage/src/X86MAC64/lmrcImageHoughTransform.sharedo differ
index 8d6d950..18010a3 100755 (executable)
Binary files a/hostdepend/X86MAC64/src/Tools/mrcImage/mrcImageHoughTransform/src/X86MAC64/mrcImageHoughTransform and b/hostdepend/X86MAC64/src/Tools/mrcImage/mrcImageHoughTransform/src/X86MAC64/mrcImageHoughTransform differ
index f2e9662..d49d5b7 100644 (file)
@@ -42,8 +42,10 @@ typedef struct lmrcImageHoughTransformInfo {
        // for TwoLines, Rectangle, FilledRectangle
        double widthMin; 
        double widthMax; 
+       double widthOut;
        double heightMin;
        double heightMax;
+       double heightOut;
        mrcImageMode InterpolationMode; 
 
        // Inverse
@@ -64,14 +66,15 @@ extern "C" {
 extern void lmrcImageHoughTransformSpaceModePrint(FILE* fpt);
 
 extern void lmrcImageHoughTransform(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
+extern void lmrcImageHoughTransformInit(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
 extern void lmrcImageHoughTransformLines(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
 extern void lmrcImageHoughTransformTwoLines(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
-extern void lmrcImageHoughTransformOpenTwoLines(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
+extern void lmrcImageHoughTransformFilledRectangles(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
 
 extern void lmrcImageHoughTransformInverse(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
+extern void lmrcImageHoughTransformInverseInit(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
 extern void lmrcImageHoughTransformInverseLines(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
 extern void lmrcImageHoughTransformInverseTwoLines(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
-extern void lmrcImageHoughTransformInverseOpenTwoLines(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
 
 
 /* prototype end */
diff --git a/src/Objects/DataManip/mrcImage/src/.lmrcImageHoughTransform.c.swp b/src/Objects/DataManip/mrcImage/src/.lmrcImageHoughTransform.c.swp
new file mode 100644 (file)
index 0000000..b64cc6d
Binary files /dev/null and b/src/Objects/DataManip/mrcImage/src/.lmrcImageHoughTransform.c.swp differ
index d1fe873..d8c22eb 100644 (file)
@@ -70,17 +70,12 @@ lmrcImageHoughTransform(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo
 }
 
 void 
-lmrcImageHoughTransformLines(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode)
+lmrcImageHoughTransformInit(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode)
 {
-    int iTheta, iRho, iRho0, iRho1, iRhoIndex, index, index2;
-    double theta, rho;
-    mrcImageParaTypeInteger x, y;
-    double data, data2, weight, weight0, weight1, Rho;
-    
     mrcDefaultHeaderValueSet(out);
     out->HeaderN.x = (int)(M_PI/linfo->deltaTheta); 
     out->HeaderN.y = 2*(int)(sqrt(SQR(in->HeaderN.x)+SQR(in->HeaderN.y))/linfo->deltaRho)+1; 
-    out->HeaderN.z = 1;
+    out->HeaderN.z = (int)((linfo->widthMax - linfo->widthMin)/linfo->deltaRho) + 1;
     out->HeaderMode = mrcFloatImage;
        out->HeaderLength.x = linfo->deltaTheta*DEGREE;
        out->HeaderLength.y = linfo->deltaRho*in->HeaderLength.x;
@@ -89,6 +84,35 @@ lmrcImageHoughTransformLines(mrcImage* out, mrcImage* in, lmrcImageHoughTransfor
        out->HeaderStartN.y = -(out->HeaderN.y - 1)/2;
        out->HeaderStartN.z = 0;
     mrcInit(out, NULL); 
+}
+
+void 
+lmrcImageHoughTransformInverseInit(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode)
+{
+       mrcDefaultHeaderValueSet(out);
+       out->HeaderN.x = linfo->Nx;
+       out->HeaderN.y = linfo->Ny;
+       out->HeaderN.z = 1;
+       out->HeaderMode = mrcFloatImage;
+       out->HeaderLength.x = linfo->dx;
+       out->HeaderLength.y = linfo->dy;
+       out->HeaderLength.z = linfo->dy;
+       out->HeaderStartN.x = 0;
+       out->HeaderStartN.y = 0;
+       out->HeaderStartN.z = 0;
+       mrcInit(out, NULL);
+}
+
+void 
+lmrcImageHoughTransformLines(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode)
+{
+    int iTheta, iRho, iRho0, iRho1, iRhoIndex, index, index2;
+    double theta, rho;
+    mrcImageParaTypeInteger x, y;
+    double data, data2, weight, weight0, weight1, Rho;
+    
+
+       lmrcImageHoughTransformInit(out, in, linfo, mode);
 
     for(y=0; y<in->HeaderN.y; y++) {
     for(x=0; x<in->HeaderN.x; x++) {
@@ -160,18 +184,7 @@ lmrcImageHoughTransformInverseLines(mrcImage* out, mrcImage* in, lmrcImageHoughT
     mrcImageParaTypeReal x, y;
     double data, data2, dx, dy, del, delta, thres;
     
-    mrcDefaultHeaderValueSet(out);
-    out->HeaderN.x = linfo->Nx;
-    out->HeaderN.y = linfo->Ny;
-    out->HeaderN.z = 1;
-    out->HeaderMode = mrcFloatImage;
-       out->HeaderLength.x = linfo->dx;
-       out->HeaderLength.y = linfo->dy;
-       out->HeaderLength.z = linfo->dy;
-       out->HeaderStartN.x = 0;
-       out->HeaderStartN.y = 0;
-       out->HeaderStartN.z = 0;
-    mrcInit(out, NULL); 
+       lmrcImageHoughTransformInverseInit(out, in, linfo, mode);
 
        delta = sqrt(SQR(out->HeaderLength.x) + SQR(out->HeaderLength.y))/2.0*in->HeaderLength.x*RADIAN;
        thres = 1.0/sqrt(2);
@@ -220,18 +233,8 @@ lmrcImageHoughTransformTwoLines(mrcImage* out, mrcImage* in, lmrcImageHoughTrans
     mrcImageParaTypeReal x, y, srcx1, srcy1, srcx2, srcy2;
     double data0, data1, data2, weight0, weight1;
 
-    mrcDefaultHeaderValueSet(out);
-    out->HeaderN.x = (int)(M_PI/linfo->deltaTheta); 
-    out->HeaderN.y = (int)(2*sqrt(SQR(in->HeaderN.x)+SQR(in->HeaderN.y))/linfo->deltaRho)+1; 
-    out->HeaderN.z = (int)((linfo->widthMax - linfo->widthMin)/linfo->deltaRho)+1;
-    out->HeaderMode = mrcFloatImage;
-       out->HeaderLength.x = linfo->deltaTheta*DEGREE;
-       out->HeaderLength.y = linfo->deltaRho*in->HeaderLength.x;
-       out->HeaderLength.z = linfo->deltaRho*in->HeaderLength.x;
-       out->HeaderStartN.x = 0;
-       out->HeaderStartN.y = -(out->HeaderN.y - 1)/2;
-       out->HeaderStartN.z = 0;
-    mrcInit(out, NULL); 
+
+       lmrcImageHoughTransformInit(out, in, linfo, mode);
 
        for(iWidth=0; iWidth<out->HeaderN.z; iWidth++) {
                width = (iWidth*linfo->deltaRho + linfo->widthMin)/2.0;         
@@ -326,18 +329,8 @@ lmrcImageHoughTransformInverseTwoLines(mrcImage* out, mrcImage* in, lmrcImageHou
     mrcImageParaTypeReal x, y;
     double data, data2, dx, dy, del, delta, thres;
     
-    mrcDefaultHeaderValueSet(out);
-    out->HeaderN.x = linfo->Nx;
-    out->HeaderN.y = linfo->Ny;
-    out->HeaderN.z = 1;
-    out->HeaderMode = mrcFloatImage;
-       out->HeaderLength.x = linfo->dx;
-       out->HeaderLength.y = linfo->dy;
-       out->HeaderLength.z = linfo->dy;
-       out->HeaderStartN.x = 0;
-       out->HeaderStartN.y = 0;
-       out->HeaderStartN.z = 0;
-    mrcInit(out, NULL); 
+
+       lmrcImageHoughTransformInverseInit(out, in, linfo, mode);
 
        thres = 1.0/sqrt(2.0);
        delta = in->HeaderLength.y*out->HeaderLength.x*RADIAN;
@@ -373,3 +366,120 @@ lmrcImageHoughTransformInverseTwoLines(mrcImage* out, mrcImage* in, lmrcImageHou
     }   
 }
 
+
+
+void
+lmrcImageHoughTransformFilledRectangles(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode)
+{
+    int iTheta, iRho, iWidth, index, iRho0, iRho1;
+    double theta, rho, rho0, rho1, rhoCentre, Rho, width, w, widthOut;
+    mrcImageParaTypeReal x, y, srcx1, srcy1, srcx2, srcy2, srcx, srcy;
+    double data0, data1, data2, weight0, weight1, data, norm;
+
+
+       lmrcImageHoughTransformInit(out, in, linfo, mode);
+
+       for(iWidth=0; iWidth<out->HeaderN.z; iWidth++) {
+               width = (iWidth*linfo->deltaRho + linfo->widthMin)/2.0; 
+               widthOut = linfo->widthOut+width;
+               norm = 1.0/out->HeaderN.x/(2.0*widthOut);
+               //DEBUGPRINT2("width: %f %f\n", width, widthOut);
+       for(y=0; y<in->HeaderN.y; y++) {
+       for(x=0; x<in->HeaderN.x; x++) {
+               for(iTheta=0; iTheta<out->HeaderN.x; iTheta++) {
+               theta     = iTheta*linfo->deltaTheta; 
+                               rhoCentre = x*cos(theta) + y*sin(theta); 
+
+                               switch(mode) {
+                                       case 0: {
+                                               if(0<=rhoCentre) {
+                                                       iRho      = (int)(rhoCentre/linfo->deltaRho+0.5);
+                                               } else {
+                                                       iRho      = (int)(rhoCentre/linfo->deltaRho-0.5);
+                                               }
+                                               iRho -= out->HeaderStartN.y; 
+
+                                               if(0<=iRho && iRho <out->HeaderN.y) {
+                                                       for(w=-width; w<=width; w+=linfo->deltaRho) {
+                                                               srcx = +w*cos(theta) + x;
+                                                               srcy = +w*sin(theta) + y;
+                                                               mrcPixelDataGet(in, srcx, srcy, 0, &data, mrcPixelRePart, linfo->InterpolationMode);
+                                                               index = iTheta + iRho*out->HeaderN.x + iWidth*out->HeaderN.x*out->HeaderN.y;
+                                                               out->ImageFloatImage[index] += (data*norm);
+                                                       }
+                                                       for(w=-widthOut; w<-width; w+=linfo->deltaRho) {
+                                                               srcx = +w*cos(theta) + x;
+                                                               srcy = +w*sin(theta) + y;
+                                                               mrcPixelDataGet(in, srcx, srcy, 0, &data, mrcPixelRePart, linfo->InterpolationMode);
+                                                               index = iTheta + iRho*out->HeaderN.x + iWidth*out->HeaderN.x*out->HeaderN.y;
+                                                               out->ImageFloatImage[index] -= (data*norm);
+                                                       }
+                                                       for(w= widthOut; width<w; w-=linfo->deltaRho) {
+                                                               srcx = +w*cos(theta) + x;
+                                                               srcy = +w*sin(theta) + y;
+                                                               mrcPixelDataGet(in, srcx, srcy, 0, &data, mrcPixelRePart, linfo->InterpolationMode);
+                                                               index = iTheta + iRho*out->HeaderN.x + iWidth*out->HeaderN.x*out->HeaderN.y;
+                                                               out->ImageFloatImage[index] -= (data*norm);
+                                                       }
+                                               }
+                                               break;
+                                       }
+                                       case 1: {
+                                               Rho  = rhoCentre/linfo->deltaRho;
+                                               iRho = (int)Rho;
+                                               if(0<=rhoCentre) {
+                                                       iRho0      = iRho;
+                                                       iRho1      = iRho + 1;
+                                               } else {
+                                                       iRho0      = iRho - 1;
+                                                       iRho1      = iRho;
+                                               }
+                                               weight0 = iRho1 - Rho;
+                                               weight1 = Rho - iRho0;
+       
+                                               //iRho -= out->HeaderStartN.y; 
+                                               iRho0 -= out->HeaderStartN.y; 
+                                               iRho1 -= out->HeaderStartN.y; 
+
+                                               if(0<=iRho0 && iRho1 <out->HeaderN.y) {
+                                                       for(w= -width; w<=width; w+=linfo->deltaRho) {
+                                                               srcx = +w*cos(theta) + x;
+                                                               srcy = +w*sin(theta) + y;
+                                                               mrcPixelDataGet(in, srcx, srcy, 0, &data, mrcPixelRePart, linfo->InterpolationMode);
+                                                               index = iTheta + iRho0*out->HeaderN.x + iWidth*out->HeaderN.x*out->HeaderN.y;
+                                                               out->ImageFloatImage[index] += (data*norm*weight0);
+                                                               index = iTheta + iRho1*out->HeaderN.x + iWidth*out->HeaderN.x*out->HeaderN.y;
+                                                               out->ImageFloatImage[index] += (data*norm*weight1);
+                                                       }
+                                                       for(w= -widthOut; w < -width; w+=linfo->deltaRho) {
+                                                               srcx = +w*cos(theta) + x;
+                                                               srcy = +w*sin(theta) + y;
+                                                               mrcPixelDataGet(in, srcx, srcy, 0, &data, mrcPixelRePart, linfo->InterpolationMode);
+                                                               index = iTheta + iRho0*out->HeaderN.x + iWidth*out->HeaderN.x*out->HeaderN.y;
+                                                               out->ImageFloatImage[index] -= (data*norm*weight0);
+                                                               index = iTheta + iRho1*out->HeaderN.x + iWidth*out->HeaderN.x*out->HeaderN.y;
+                                                               out->ImageFloatImage[index] -= (data*norm*weight1);
+                                                       }
+                                                       for(w= widthOut; width < w; w-=linfo->deltaRho) {
+                                                               srcx = +w*cos(theta) + x;
+                                                               srcy = +w*sin(theta) + y;
+                                                               mrcPixelDataGet(in, srcx, srcy, 0, &data, mrcPixelRePart, linfo->InterpolationMode);
+                                                               index = iTheta + iRho0*out->HeaderN.x + iWidth*out->HeaderN.x*out->HeaderN.y;
+                                                               out->ImageFloatImage[index] -= (data*norm*weight0);
+                                                               index = iTheta + iRho1*out->HeaderN.x + iWidth*out->HeaderN.x*out->HeaderN.y;
+                                                               out->ImageFloatImage[index] -= (data*norm*weight1);
+                                                       }
+                                               }
+                                               break;
+                                       }
+                                       dafault: {
+                                               fprintf(stderr, "Not supported Mode: %d\n", mode);
+                                               exit(EXIT_FAILURE);
+                                               break;
+                                       }
+                               }
+                       }
+        }  
+    }  
+    }  
+}
index f2e9662..d49d5b7 100644 (file)
@@ -42,8 +42,10 @@ typedef struct lmrcImageHoughTransformInfo {
        // for TwoLines, Rectangle, FilledRectangle
        double widthMin; 
        double widthMax; 
+       double widthOut;
        double heightMin;
        double heightMax;
+       double heightOut;
        mrcImageMode InterpolationMode; 
 
        // Inverse
@@ -64,14 +66,15 @@ extern "C" {
 extern void lmrcImageHoughTransformSpaceModePrint(FILE* fpt);
 
 extern void lmrcImageHoughTransform(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
+extern void lmrcImageHoughTransformInit(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
 extern void lmrcImageHoughTransformLines(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
 extern void lmrcImageHoughTransformTwoLines(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
-extern void lmrcImageHoughTransformOpenTwoLines(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
+extern void lmrcImageHoughTransformFilledRectangles(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
 
 extern void lmrcImageHoughTransformInverse(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
+extern void lmrcImageHoughTransformInverseInit(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
 extern void lmrcImageHoughTransformInverseLines(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
 extern void lmrcImageHoughTransformInverseTwoLines(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
-extern void lmrcImageHoughTransformInverseOpenTwoLines(mrcImage* out, mrcImage* in, lmrcImageHoughTransformInfo* linfo, int mode);
 
 
 /* prototype end */
index e9e0797..ad63e4f 100755 (executable)
@@ -526,3 +526,4 @@ WORLDNAME=Tools
 WORLDNAME=Tools
 WORLDNAME=Tools
 WORLDNAME=Tools
+WORLDNAME=Tools
index 1e09cec..4867ade 100755 (executable)
@@ -6,6 +6,7 @@
 "-dRho","-d[elta]Rho","DeltaRho[pixel]","Optional","1","1","DeltaRho","Real","1.0"
 "-M","-M[ode]","HoughTransformMode","Optional","1","1","HoughMode","Integer","0"
 "-width","-width","Width[pixel]","Optional","2","1","widthMin","Real","0","2","widthMax","Integer","0"
+"-widthOut","-widthOut","Width[pixel]","Optional","1","1","widthOut","Real","0"
 "-IM","-I[nterpolation]M[ode]","mrcImageMode: HowToGet","Optional","1","1","InterpolationMode","Integer","0"
 "-c","-c[onfig]","ConfigurationFile","Optional","1","1","configFile","inFile","NULL"
 "-m","-m[ode]","Mode","Optional","1","1","mode","Integer","0"
index 886419b..15a0d88 100755 (executable)
@@ -36,6 +36,9 @@ typedef struct mrcImageHoughTransformInfo {
     long flagwidthMax;
     long widthMax;
     
+    long flagwidthOut;
+    float widthOut;
+    
     long flagInterpolationMode;
     long InterpolationMode;
     
index 83ef8f3..e904156 100755 (executable)
@@ -97,6 +97,17 @@ argCheck(mrcImageHoughTransformInfo* info, int argc, char* argv[])
                     }
                     SBREAK;
                 }
+                SCASE("widthOut") {
+                    if(i+1<argc) {
+                        info->widthOut = stringGetNthRealData(argv[i+1], 1, " ,");
+                        i++;
+                        info->flagwidthOut++;
+                    } else {
+                        usage(argv[0]);
+                        exit(EXIT_FAILURE);
+                    }
+                    SBREAK;
+                }
                 SCASE("IM") {
                     if(i+1<argc) {
                         info->InterpolationMode = stringGetNthIntegerData(argv[i+1], 1, " ,");
index ec1245f..d10e205 100755 (executable)
@@ -19,6 +19,7 @@ init0(mrcImageHoughTransformInfo* info)
     info->HoughMode = 0;    info->flagHoughMode = 0;
     info->widthMin = 0;    info->flagwidthMin = 0;
     info->widthMax = 0;    info->flagwidthMax = 0;
+    info->widthOut = 0;    info->flagwidthOut = 0;
     info->InterpolationMode = 0;    info->flagInterpolationMode = 0;
     info->fptconfigFile = NULL;    info->flagconfigFile = 0;
     info->mode = 0;    info->flagmode = 0;
@@ -62,6 +63,9 @@ init1(mrcImageHoughTransformInfo* info)
     if(info->flagwidthMax) {
     }
     
+    if(info->flagwidthOut) {
+    }
+    
     if(info->flagInterpolationMode) {
     }
     
index 025e1bc..675a0b4 100755 (executable)
@@ -38,6 +38,7 @@ main(int argc, char* argv[])
        linfo.HoughSpaceMode = info.HoughMode;
        linfo.widthMin = info.widthMin;
        linfo.widthMax = info.widthMax;
+       linfo.widthOut = info.widthOut;
        linfo.InterpolationMode = info.InterpolationMode;
 
        mrcFileRead(&in, info.In, "in main", 0);
index c1dc9ee..f073a4b 100755 (executable)
@@ -15,6 +15,7 @@ Options:
     [-M[ode]             HoughMode           (0         ).as(Integer             ) ] :Optional  :HoughTransformMode
     [-width              widthMin            (0         ).as(Real                ) 
                          widthMax            (0         ).as(Integer             ) ] :Optional  :Width[pixel]
+    [-widthOut           widthOut            (0         ).as(Real                ) ] :Optional  :Width[pixel]
     [-I[nterpolation]M[ode]InterpolationMode   (0         ).as(Integer             ) ] :Optional  :mrcImageMode: HowToGet
     [-c[onfig]           configFile          (NULL      ).as(inFile              ) ] :Optional  :ConfigurationFile
     [-m[ode]             mode                (0         ).as(Integer             ) ] :Optional  :Mode
@@ -25,11 +26,11 @@ Options:
 1: TwoLines
     0: Nearest(centre) + InterpolationMode
     1: Linear(centre)  + InterpolationMode
-3: Rectangles
-4: FilledRectangles
-5: Circles
-6: FilledCircles
-7: GivenStructure
+3: Rectangles (not yet)
+4: FilledRectangles (not yet)
+5: Circles (not yet)
+6: FilledCircles (not yet)
+7: GivenStructure (not yet)
 </PRE>
 </BODY>
 </HTML>
index 5d653da..43ea821 100755 (executable)
         -f 1 0 1 0 0 -1x1+1+6.000000 0 0 1.000000 0 0 0 'DeltaRho' 'DeltaRho[pixel]' dRho
         -i 1 0 1 0 0 -1x1+1+7.500000 0 0 0 0 0 'HoughMode' 'HoughTransformMode' M
         -I  1 0 0 1 0 1 -1x1+1+9 ' ' '0' 'widthMin' Width[pixel]
-        -i 1 0 1 0 0 -1x1+1+10.500000 0 0 0 0 0 'InterpolationMode' 'mrcImageMode: HowToGet' IM
-        -I 1 0 1 0 0 1 -1x1+1+12.000000 ' ' 'configFile' 'ConfigurationFile' c
-        -i 1 0 1 0 0 -1x1+1+13.500000 0 0 0 0 0 'mode' 'Mode' m
+        -f 1 0 1 0 0 -1x1+1+10.500000 0 0 0.000000 0 0 0 'widthOut' 'Width[pixel]' widthOut
+        -i 1 0 1 0 0 -1x1+1+12.000000 0 0 0 0 0 'InterpolationMode' 'mrcImageMode: HowToGet' IM
+        -I 1 0 1 0 0 1 -1x1+1+13.500000 ' ' 'configFile' 'ConfigurationFile' c
+        -i 1 0 1 0 0 -1x1+1+15.000000 0 0 0 0 0 'mode' 'Mode' m
     -E
   -E
 -E
index ce19471..6ba4f71 100755 (executable)
@@ -13,6 +13,7 @@ usage(char* thisProgram)
     fprintf(stderr, "    [-d[elta]Rho         DeltaRho            (1.0       ).as(Real                ) ] :Optional  :DeltaRho[pixel]\n");
     fprintf(stderr, "    [-M[ode]             HoughMode           (0         ).as(Integer             ) ] :Optional  :HoughTransformMode\n");
     fprintf(stderr, "    [-width              widthMin            (0         ).as(Real                ) \n                         widthMax            (0         ).as(Integer             ) ] :Optional  :Width[pixel]\n");
+    fprintf(stderr, "    [-widthOut           widthOut            (0         ).as(Real                ) ] :Optional  :Width[pixel]\n");
     fprintf(stderr, "    [-I[nterpolation]M[ode]InterpolationMode   (0         ).as(Integer             ) ] :Optional  :mrcImageMode: HowToGet\n");
     fprintf(stderr, "    [-c[onfig]           configFile          (NULL      ).as(inFile              ) ] :Optional  :ConfigurationFile\n");
     fprintf(stderr, "    [-m[ode]             mode                (0         ).as(Integer             ) ] :Optional  :Mode\n");