--- /dev/null
+../sbin/MachineIndependent
\ No newline at end of file
X86MAC64/lmrcImagePartImageSegmentation.o:lmrcImagePartImageSegmentation.o
X86MAC64/lmrcImagePixelSummationOfProbabilityGetByImage.o:lmrcImagePixelSummationOfProbabilityGetByImage.o
X86MAC64/lmrcImagePosterization.o:lmrcImagePosterization.o
+X86MAC64/lmrcImagePrevitt.o:lmrcImagePrevitt.o
X86MAC64/lmrcImageProjection.o:lmrcImageProjection.o
X86MAC64/lmrcImageProportionalDensityLevelSetByImage.o:lmrcImageProportionalDensityLevelSetByImage.o
X86MAC64/lmrcImageROI2D.o:lmrcImageROI2D.o
X86MAC64/lmrcImageROInotChangeHeaderLength.o:lmrcImageROInotChangeHeaderLength.o
X86MAC64/lmrcImageRadialDistribution.o:lmrcImageRadialDistribution.o
X86MAC64/lmrcImageRhoFiltering.o:lmrcImageRhoFiltering.o
+X86MAC64/lmrcImageRoberts.o:lmrcImageRoberts.o
X86MAC64/lmrcImageRotation.o:lmrcImageRotation.o
X86MAC64/lmrcImageSSDA.o:lmrcImageSSDA.o
X86MAC64/lmrcImageSamplingUnitChange.o:lmrcImageSamplingUnitChange.o
X86MAC64/lmrcImageSinogramCorrelation.o:lmrcImageSinogramCorrelation.o
X86MAC64/lmrcImageSinogramFFT.o:lmrcImageSinogramFFT.o
X86MAC64/lmrcImageSmoothing.o:lmrcImageSmoothing.o
+X86MAC64/lmrcImageSobel.o:lmrcImageSobel.o
X86MAC64/lmrcImageSolventFlattening.o:lmrcImageSolventFlattening.o
X86MAC64/lmrcImageSphere.o:lmrcImageSphere.o
X86MAC64/lmrcImageSplit.o:lmrcImageSplit.o
lmrcImagePartImageSegmentation.c \
lmrcImagePixelSummationOfProbabilityGetByImage.c \
lmrcImagePosterization.c \
+lmrcImagePrevitt.c \
lmrcImageProjection.c \
lmrcImageProportionalDensityLevelSetByImage.c \
lmrcImageROI2D.c \
lmrcImageROInotChangeHeaderLength.c \
lmrcImageRadialDistribution.c \
lmrcImageRhoFiltering.c \
+lmrcImageRoberts.c \
lmrcImageRotation.c \
lmrcImageSSDA.c \
lmrcImageSamplingUnitChange.c \
lmrcImageSinogramCorrelation.c \
lmrcImageSinogramFFT.c \
lmrcImageSmoothing.c \
+lmrcImageSobel.c \
lmrcImageSolventFlattening.c \
lmrcImageSphere.c \
lmrcImageSplit.c \
lmrcImagePartImageSegmentation.o \
lmrcImagePixelSummationOfProbabilityGetByImage.o \
lmrcImagePosterization.o \
+lmrcImagePrevitt.o \
lmrcImageProjection.o \
lmrcImageProportionalDensityLevelSetByImage.o \
lmrcImageROI2D.o \
lmrcImageROInotChangeHeaderLength.o \
lmrcImageRadialDistribution.o \
lmrcImageRhoFiltering.o \
+lmrcImageRoberts.o \
lmrcImageRotation.o \
lmrcImageSSDA.o \
lmrcImageSamplingUnitChange.o \
lmrcImageSinogramCorrelation.o \
lmrcImageSinogramFFT.o \
lmrcImageSmoothing.o \
+lmrcImageSobel.o \
lmrcImageSolventFlattening.o \
lmrcImageSphere.o \
lmrcImageSplit.o \
lmrcImagePartImageSegmentation.sharedo \
lmrcImagePixelSummationOfProbabilityGetByImage.sharedo \
lmrcImagePosterization.sharedo \
+lmrcImagePrevitt.sharedo \
lmrcImageProjection.sharedo \
lmrcImageProportionalDensityLevelSetByImage.sharedo \
lmrcImageROI2D.sharedo \
lmrcImageROInotChangeHeaderLength.sharedo \
lmrcImageRadialDistribution.sharedo \
lmrcImageRhoFiltering.sharedo \
+lmrcImageRoberts.sharedo \
lmrcImageRotation.sharedo \
lmrcImageSSDA.sharedo \
lmrcImageSamplingUnitChange.sharedo \
lmrcImageSinogramCorrelation.sharedo \
lmrcImageSinogramFFT.sharedo \
lmrcImageSmoothing.sharedo \
+lmrcImageSobel.sharedo \
lmrcImageSolventFlattening.sharedo \
lmrcImageSphere.sharedo \
lmrcImageSplit.sharedo \
X86MAC64/lmrcImagePartImageSegmentation.o \
X86MAC64/lmrcImagePixelSummationOfProbabilityGetByImage.o \
X86MAC64/lmrcImagePosterization.o \
+X86MAC64/lmrcImagePrevitt.o \
X86MAC64/lmrcImageProjection.o \
X86MAC64/lmrcImageProportionalDensityLevelSetByImage.o \
X86MAC64/lmrcImageROI2D.o \
X86MAC64/lmrcImageROInotChangeHeaderLength.o \
X86MAC64/lmrcImageRadialDistribution.o \
X86MAC64/lmrcImageRhoFiltering.o \
+X86MAC64/lmrcImageRoberts.o \
X86MAC64/lmrcImageRotation.o \
X86MAC64/lmrcImageSSDA.o \
X86MAC64/lmrcImageSamplingUnitChange.o \
X86MAC64/lmrcImageSinogramCorrelation.o \
X86MAC64/lmrcImageSinogramFFT.o \
X86MAC64/lmrcImageSmoothing.o \
+X86MAC64/lmrcImageSobel.o \
X86MAC64/lmrcImageSolventFlattening.o \
X86MAC64/lmrcImageSphere.o \
X86MAC64/lmrcImageSplit.o \
X86MAC64/lmrcImagePartImageSegmentation.sharedo \
X86MAC64/lmrcImagePixelSummationOfProbabilityGetByImage.sharedo \
X86MAC64/lmrcImagePosterization.sharedo \
+X86MAC64/lmrcImagePrevitt.sharedo \
X86MAC64/lmrcImageProjection.sharedo \
X86MAC64/lmrcImageProportionalDensityLevelSetByImage.sharedo \
X86MAC64/lmrcImageROI2D.sharedo \
X86MAC64/lmrcImageROInotChangeHeaderLength.sharedo \
X86MAC64/lmrcImageRadialDistribution.sharedo \
X86MAC64/lmrcImageRhoFiltering.sharedo \
+X86MAC64/lmrcImageRoberts.sharedo \
X86MAC64/lmrcImageRotation.sharedo \
X86MAC64/lmrcImageSSDA.sharedo \
X86MAC64/lmrcImageSamplingUnitChange.sharedo \
X86MAC64/lmrcImageSinogramCorrelation.sharedo \
X86MAC64/lmrcImageSinogramFFT.sharedo \
X86MAC64/lmrcImageSmoothing.sharedo \
+X86MAC64/lmrcImageSobel.sharedo \
X86MAC64/lmrcImageSolventFlattening.sharedo \
X86MAC64/lmrcImageSphere.sharedo \
X86MAC64/lmrcImageSplit.sharedo \
lmrcImagePartImageSegmentation.debugo \
lmrcImagePixelSummationOfProbabilityGetByImage.debugo \
lmrcImagePosterization.debugo \
+lmrcImagePrevitt.debugo \
lmrcImageProjection.debugo \
lmrcImageProportionalDensityLevelSetByImage.debugo \
lmrcImageROI2D.debugo \
lmrcImageROInotChangeHeaderLength.debugo \
lmrcImageRadialDistribution.debugo \
lmrcImageRhoFiltering.debugo \
+lmrcImageRoberts.debugo \
lmrcImageRotation.debugo \
lmrcImageSSDA.debugo \
lmrcImageSamplingUnitChange.debugo \
lmrcImageSinogramCorrelation.debugo \
lmrcImageSinogramFFT.debugo \
lmrcImageSmoothing.debugo \
+lmrcImageSobel.debugo \
lmrcImageSolventFlattening.debugo \
lmrcImageSphere.debugo \
lmrcImageSplit.debugo \
X86MAC64/lmrcImagePartImageSegmentation.debugo \
X86MAC64/lmrcImagePixelSummationOfProbabilityGetByImage.debugo \
X86MAC64/lmrcImagePosterization.debugo \
+X86MAC64/lmrcImagePrevitt.debugo \
X86MAC64/lmrcImageProjection.debugo \
X86MAC64/lmrcImageProportionalDensityLevelSetByImage.debugo \
X86MAC64/lmrcImageROI2D.debugo \
X86MAC64/lmrcImageROInotChangeHeaderLength.debugo \
X86MAC64/lmrcImageRadialDistribution.debugo \
X86MAC64/lmrcImageRhoFiltering.debugo \
+X86MAC64/lmrcImageRoberts.debugo \
X86MAC64/lmrcImageRotation.debugo \
X86MAC64/lmrcImageSSDA.debugo \
X86MAC64/lmrcImageSamplingUnitChange.debugo \
X86MAC64/lmrcImageSinogramCorrelation.debugo \
X86MAC64/lmrcImageSinogramFFT.debugo \
X86MAC64/lmrcImageSmoothing.debugo \
+X86MAC64/lmrcImageSobel.debugo \
X86MAC64/lmrcImageSolventFlattening.debugo \
X86MAC64/lmrcImageSphere.debugo \
X86MAC64/lmrcImageSplit.debugo \
lmrcImagePartImageSegmentation.cudagdb.o \
lmrcImagePixelSummationOfProbabilityGetByImage.cudagdb.o \
lmrcImagePosterization.cudagdb.o \
+lmrcImagePrevitt.cudagdb.o \
lmrcImageProjection.cudagdb.o \
lmrcImageProportionalDensityLevelSetByImage.cudagdb.o \
lmrcImageROI2D.cudagdb.o \
lmrcImageROInotChangeHeaderLength.cudagdb.o \
lmrcImageRadialDistribution.cudagdb.o \
lmrcImageRhoFiltering.cudagdb.o \
+lmrcImageRoberts.cudagdb.o \
lmrcImageRotation.cudagdb.o \
lmrcImageSSDA.cudagdb.o \
lmrcImageSamplingUnitChange.cudagdb.o \
lmrcImageSinogramCorrelation.cudagdb.o \
lmrcImageSinogramFFT.cudagdb.o \
lmrcImageSmoothing.cudagdb.o \
+lmrcImageSobel.cudagdb.o \
lmrcImageSolventFlattening.cudagdb.o \
lmrcImageSphere.cudagdb.o \
lmrcImageSplit.cudagdb.o \
X86MAC64/lmrcImagePartImageSegmentation.cudagdb.o \
X86MAC64/lmrcImagePixelSummationOfProbabilityGetByImage.cudagdb.o \
X86MAC64/lmrcImagePosterization.cudagdb.o \
+X86MAC64/lmrcImagePrevitt.cudagdb.o \
X86MAC64/lmrcImageProjection.cudagdb.o \
X86MAC64/lmrcImageProportionalDensityLevelSetByImage.cudagdb.o \
X86MAC64/lmrcImageROI2D.cudagdb.o \
X86MAC64/lmrcImageROInotChangeHeaderLength.cudagdb.o \
X86MAC64/lmrcImageRadialDistribution.cudagdb.o \
X86MAC64/lmrcImageRhoFiltering.cudagdb.o \
+X86MAC64/lmrcImageRoberts.cudagdb.o \
X86MAC64/lmrcImageRotation.cudagdb.o \
X86MAC64/lmrcImageSSDA.cudagdb.o \
X86MAC64/lmrcImageSamplingUnitChange.cudagdb.o \
X86MAC64/lmrcImageSinogramCorrelation.cudagdb.o \
X86MAC64/lmrcImageSinogramFFT.cudagdb.o \
X86MAC64/lmrcImageSmoothing.cudagdb.o \
+X86MAC64/lmrcImageSobel.cudagdb.o \
X86MAC64/lmrcImageSolventFlattening.cudagdb.o \
X86MAC64/lmrcImageSphere.cudagdb.o \
X86MAC64/lmrcImageSplit.cudagdb.o \
--- /dev/null
+../lmrcImagePrevitt.c
\ No newline at end of file
--- /dev/null
+../lmrcImageRoberts.c
\ No newline at end of file
--- /dev/null
+../lmrcImageSobel.c
\ No newline at end of file
/usr/include/limits.h /usr/include/machine/limits.h \
/usr/include/i386/limits.h /usr/include/i386/_limits.h \
/usr/include/sys/syslimits.h
+mrcImageEdgeEnhancement.o: mrcImageEdgeEnhancement.c /usr/include/stdio.h \
+ /usr/include/sys/cdefs.h /usr/include/sys/_symbol_aliasing.h \
+ /usr/include/sys/_posix_availability.h /usr/include/Availability.h \
+ /usr/include/AvailabilityInternal.h /usr/include/_types.h \
+ /usr/include/sys/_types.h /usr/include/machine/_types.h \
+ /usr/include/i386/_types.h /usr/include/sys/_types/_va_list.h \
+ /usr/include/sys/_types/_size_t.h /usr/include/sys/_types/_null.h \
+ /usr/include/sys/_types/_off_t.h /usr/include/sys/_types/_ssize_t.h \
+ /usr/include/secure/_stdio.h /usr/include/secure/_common.h \
+ /usr/include/stdlib.h /usr/include/sys/wait.h \
+ /usr/include/sys/_types/_pid_t.h /usr/include/sys/_types/_id_t.h \
+ /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \
+ /usr/include/machine/signal.h /usr/include/i386/signal.h \
+ /usr/include/machine/_mcontext.h /usr/include/i386/_mcontext.h \
+ /usr/include/mach/i386/_structs.h \
+ /usr/include/sys/_types/_sigaltstack.h \
+ /usr/include/sys/_types/_ucontext.h \
+ /usr/include/sys/_types/_pthread_attr_t.h \
+ /usr/include/sys/_types/_sigset_t.h /usr/include/sys/_types/_uid_t.h \
+ /usr/include/sys/resource.h \
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.1/include/stdint.h \
+ /usr/include/stdint.h /usr/include/sys/_types/_int8_t.h \
+ /usr/include/sys/_types/_int16_t.h /usr/include/sys/_types/_int32_t.h \
+ /usr/include/sys/_types/_int64_t.h /usr/include/_types/_uint8_t.h \
+ /usr/include/_types/_uint16_t.h /usr/include/_types/_uint32_t.h \
+ /usr/include/_types/_uint64_t.h /usr/include/sys/_types/_intptr_t.h \
+ /usr/include/sys/_types/_uintptr_t.h /usr/include/_types/_intmax_t.h \
+ /usr/include/_types/_uintmax_t.h /usr/include/sys/_types/_timeval.h \
+ /usr/include/machine/endian.h /usr/include/i386/endian.h \
+ /usr/include/sys/_endian.h /usr/include/libkern/_OSByteOrder.h \
+ /usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
+ /usr/include/sys/_types/_ct_rune_t.h /usr/include/sys/_types/_rune_t.h \
+ /usr/include/sys/_types/_wchar_t.h /usr/include/machine/types.h \
+ /usr/include/i386/types.h /usr/include/sys/_types/___offsetof.h \
+ /usr/include/sys/_types/_dev_t.h /usr/include/sys/_types/_mode_t.h \
+ /Users/tacyas/Eos/include/string.h /usr/include/math.h ../inc/config.h \
+ ../inc/../inc/mrcImageEdgeEnhancement.h \
+ /Users/tacyas/Eos/include/genUtil.h \
+ /Users/tacyas/Eos/include/mrcImage.h \
+ /Users/tacyas/Eos/include/ctfInfo.h /Users/tacyas/Eos/include/Vector.h \
+ /Users/tacyas/Eos/include/Matrix3D.h /Users/tacyas/Eos/include/Array.h \
+ /Users/tacyas/Eos/include/lmrcImageEdgeEnhancement.h
usage.o: usage.c /usr/include/stdio.h /usr/include/sys/cdefs.h \
/usr/include/sys/_symbol_aliasing.h \
/usr/include/sys/_posix_availability.h /usr/include/Availability.h \
--- /dev/null
+../../../../../hostdepend/X86MAC64/src/Tools/mrcImage/mrcImageEdgeEnhancement/src/X86MAC64
\ No newline at end of file
/* constant begin */
+typedef enum lmrcImageEdgeEnhancementMode {
+ lmrcImageEdegeEnhancementModeCentralDifferenceSQRT=0,
+ lmrcImageEdegeEnhancementModeCentralDifferenceABS,
+ lmrcImageEdegeEnhancementModeRobertsCrossSQRT,
+ lmrcImageEdegeEnhancementModeRobertsCrossABS,
+ lmrcImageEdegeEnhancementModePrewittSQRT,
+ lmrcImageEdegeEnhancementModePrewittABS,
+ lmrcImageEdegeEnhancementModeSobelSQRT,
+ lmrcImageEdegeEnhancementModeSobelABS
+} lmrcImageEdgeEnhancementMode;
+
/* constant end */
/* struct begin */
typedef struct lmrcImageEdgeEnhancementInfo {
+ int flagDirection;
+ mrcImage* direction;
+
int mode;
-} lmrcImageEdgeEnhancementInfo;
+} lmrcImageEdgeEnhancementInfo;
/* struct end */
/* prototype begin */
+extern void lmrcImageEdgeEnhancementPrepare(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
+extern void lmrcImageEdgeEnhancement(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
+extern void lmrcImageEdgeEnhancementModePrint(FILE* fpt);
+
+extern void lmrcImageEdgeEnhancementRobertsCrossOperatorSQRT(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
+extern void lmrcImageEdgeEnhancementRobertsCrossOperatorABS(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
+
+extern void lmrcImageEdgeEnhancementPrewittOperatorSQRT(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
+extern void lmrcImageEdgeEnhancementPrewittOperatorABS(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
+
+extern void lmrcImageEdgeEnhancementSobelOperatorSQRT(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
+extern void lmrcImageEdgeEnhancementSobelOperatorABS(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
/* prototype end */
*/
static char __sccs_id[] = "%Z%lmrcImageEdgeEnhancement ver%I%; Date:%D% %Z%";
+#include <stdio.h>
+#include <stdlib.h>
+#include "Memory.h"
#include "./lmrcImageEdgeEnhancement.h"
-lmrcImageEdgeEnhancement(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo linfo, mode)
+void
+lmrcImageEdgeEnhancementModePrint(FILE* fpt)
{
-
+ fprintf(stderr, "mode: %d : %s\n", lmrcImageEdegeEnhancementModeRobertsCrossSQRT, "Roberts Cross(SQRT)");
+ fprintf(stderr, "mode: %d : %s\n", lmrcImageEdegeEnhancementModeRobertsCrossABS, "Roberts Cross(ABS)");
+ fprintf(stderr, "mode: %d : %s\n", lmrcImageEdegeEnhancementModePrewittSQRT, "Prewitt(SQRT)");
+ 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)");
}
-
-lmrcImageEdgeEnhancementPrewittOperator(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo linfo, mode)
+void
+lmrcImageEdgeEnhancement(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode)
{
-
+ switch(mode) {
+ case lmrcImageEdegeEnhancementModeCentralDifferenceSQRT:
+ break;
+ case lmrcImageEdegeEnhancementModeCentralDifferenceABS:
+ break;
+ case lmrcImageEdegeEnhancementModeRobertsCrossSQRT:
+ lmrcImageEdgeEnhancementRobertsCrossOperatorSQRT(out, in, linfo, mode);
+ break;
+ case lmrcImageEdegeEnhancementModeRobertsCrossABS:
+ lmrcImageEdgeEnhancementRobertsCrossOperatorABS(out, in, linfo, mode);
+ break;
+ case lmrcImageEdegeEnhancementModePrewittSQRT:
+ lmrcImageEdgeEnhancementPrewittOperatorSQRT(out, in, linfo, mode);
+ break;
+ case lmrcImageEdegeEnhancementModePrewittABS:
+ lmrcImageEdgeEnhancementPrewittOperatorABS(out, in, linfo, mode);
+ break;
+ case lmrcImageEdegeEnhancementModeSobelSQRT:
+ lmrcImageEdgeEnhancementSobelOperatorSQRT(out, in, linfo, mode);
+ break;
+ case lmrcImageEdegeEnhancementModeSobelABS:
+ lmrcImageEdgeEnhancementSobelOperatorABS(out, in, linfo, mode);
+ break;
+ default:
+ break;
+ }
}
-
-lmrcImageEdgeEnhancementSobelOperator(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo linfo, mode)
+void
+lmrcImageEdgeEnhancementPrepare(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode)
{
-
+ int i, max;
+
+ out->Header.Cont = in->Header.Cont;
+ mrcInit(out, NULL);
+ if(linfo->flagDirection) {
+ if(1<in->HeaderN.z) {
+ max = 2;
+ } else {
+ max = 1;
+ }
+ linfo->direction = (mrcImage*)memoryAllocate(sizeof(mrcImage)*max, "in lmrcImageEdgeEnhancementRobertsCrossOperator");
+ for(i=0; i<max; i++) {
+ linfo->direction[i].Header.Cont = in->Header.Cont;
+ mrcInit(&(linfo->direction[i]), NULL);
+ }
+ }
}
-
-lmrcImageEdgeEnhancementCannyFilter(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo linfo, mode)
-{
-
-}
-
-
-lmrcImageEdgeEnhancementDericheFilter(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo linfo, mode)
-{
-
-}
-
-
-
/* constant begin */
+typedef enum lmrcImageEdgeEnhancementMode {
+ lmrcImageEdegeEnhancementModeCentralDifferenceSQRT=0,
+ lmrcImageEdegeEnhancementModeCentralDifferenceABS,
+ lmrcImageEdegeEnhancementModeRobertsCrossSQRT,
+ lmrcImageEdegeEnhancementModeRobertsCrossABS,
+ lmrcImageEdegeEnhancementModePrewittSQRT,
+ lmrcImageEdegeEnhancementModePrewittABS,
+ lmrcImageEdegeEnhancementModeSobelSQRT,
+ lmrcImageEdegeEnhancementModeSobelABS
+} lmrcImageEdgeEnhancementMode;
+
/* constant end */
/* struct begin */
typedef struct lmrcImageEdgeEnhancementInfo {
+ int flagDirection;
+ mrcImage* direction;
+
int mode;
-} lmrcImageEdgeEnhancementInfo;
+} lmrcImageEdgeEnhancementInfo;
/* struct end */
/* prototype begin */
+extern void lmrcImageEdgeEnhancementPrepare(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
+extern void lmrcImageEdgeEnhancement(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
+extern void lmrcImageEdgeEnhancementModePrint(FILE* fpt);
+
+extern void lmrcImageEdgeEnhancementRobertsCrossOperatorSQRT(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
+extern void lmrcImageEdgeEnhancementRobertsCrossOperatorABS(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
+
+extern void lmrcImageEdgeEnhancementPrewittOperatorSQRT(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
+extern void lmrcImageEdgeEnhancementPrewittOperatorABS(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
+
+extern void lmrcImageEdgeEnhancementSobelOperatorSQRT(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
+extern void lmrcImageEdgeEnhancementSobelOperatorABS(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode);
/* prototype end */
--- /dev/null
+/*
+# %M% %Y% %I%
+# The latest update : %G% at %U%
+#
+#%Z% lmrcImagePrevitt ver %I%
+#%Z% Created by
+#%Z%
+#%Z% Usage : lmrcImagePrevitt
+#%Z% Attention
+#%Z%
+*/
+static char __sccs_id[] = "%Z%lmrcImagePrevitt ver%I%; Date:%D% %Z%";
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "./lmrcImageEdgeEnhancement.h"
+
+void
+lmrcImageEdgeEnhancementPrewittOperatorSQRT(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode)
+{
+ mrcImageParaTypeReal x, y, z;
+ double src00, src01, src02;
+ double src10, src11, src12;
+ double src20, src21, src22;
+ double src000, src001, src002, src010, src011, src012, src020, src021, src022;
+ double src100, src101, src102, src110, src111, src112, src120, src121, src122;
+ double src200, src201, src202, src210, src211, src212, src220, src221, src222;
+ double dst, Gx, Gy, Gz;
+
+
+ lmrcImageEdgeEnhancementPrepare(out, in, linfo, mode);
+
+ if(1<in->HeaderN.z) { // 3D
+ for(z=0; z<in->HeaderN.z; z++) {
+ for(y=0; y<in->HeaderN.y; y++) {
+ for(x=0; x<in->HeaderN.x; x++) {
+ mrcPixelDataGet(in, x, y, z , &src000, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y, z+1, &src001, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z , &src010, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z+1, &src011, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y, z , &src100, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y, z+1, &src101, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z , &src010, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z+1, &src011, mrcPixelRePart, mrcPixelHowNearest);
+ switch(mode) {
+ case 0: { /* 2x2x1 */
+ Gx = (src200 - src000 + src210 - src010 + src220 - src020
+ +src200 - src000 + src201 - src001 + src202 - src002)/6.0;
+ Gy = (src020 - src000 + src021 - src001 + src022 - src002
+ +src020 - src000 + src120 - src100 + src220 - src200)/6.0;
+ Gz = (src002 - src000 + src102 - src100 + src202 - src200
+ +src002 - src000 + src012 - src010 + src022 - src020)/6.0;
+ break;
+ }
+ default: {
+ fprintf(stderr, "Not supported mode: %d in lmrcImageEdgeEnhancementRobertsCrossOperatorSQRT\n", mode);
+ exit(EXIT_FAILURE);
+ break;
+ }
+ }
+ dst = SQR(Gx) + SQR(Gy) + SQR(Gz);
+ if(0<dst) {
+ dst = sqrt(dst);
+ } else {
+ dst = 0;
+ }
+ mrcPixelDataSet(out, x, y, z, dst, mrcPixelRePart);
+ }
+ }
+ }
+ } else { // 2D
+ for(y=1; y<in->HeaderN.y-1; y++) {
+ for(x=1; x<in->HeaderN.x-1; x++) {
+ mrcPixelDataGet(in, x-1, y-1, 0, &src00, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x-1, y, 0, &src01, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x-1, y+1, 0, &src02, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y-1, 0, &src10, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, 0, &src12, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y-1, 0, &src20, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y, 0, &src21, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y+1, 0, &src22, mrcPixelRePart, mrcPixelHowNearest);
+
+ Gx = (src20 - src00 + src21 - src01 + src22 - src02)/3.0;
+ Gy = (src02 - src00 + src12 - src10 + src22 - src20)/3.0;
+
+ dst = SQR(Gx) + SQR(Gy);
+ if(0<dst) {
+ dst = sqrt(dst);
+ } else {
+ dst = 0;
+ }
+ mrcPixelDataSet(out, x, y, 0, dst, mrcPixelRePart);
+
+ if(linfo->flagDirection) {
+ dst = atan2(Gy, Gx)*180.0/M_PI;
+ mrcPixelDataSet(&(linfo->direction[0]), x, y, 0, dst, mrcPixelRePart);
+ }
+ }
+ }
+ }
+}
+
+
+void
+lmrcImageEdgeEnhancementPrewittOperatorABS(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode)
+{
+ mrcImageParaTypeReal x, y, z;
+ double src00, src01, src02;
+ double src10, src11, src12;
+ double src20, src21, src22;
+ double src000, src001, src002, src010, src011, src012, src020, src021, src022;
+ double src100, src101, src102, src110, src111, src112, src120, src121, src122;
+ double src200, src201, src202, src210, src211, src212, src220, src221, src222;
+ double dst, Gx, Gy, Gz;
+
+
+ lmrcImageEdgeEnhancementPrepare(out, in, linfo, mode);
+
+ if(1<in->HeaderN.z) { // 3D
+ for(z=0; z<in->HeaderN.z; z++) {
+ for(y=0; y<in->HeaderN.y; y++) {
+ for(x=0; x<in->HeaderN.x; x++) {
+ mrcPixelDataGet(in, x, y, z , &src000, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y, z+1, &src001, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z , &src010, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z+1, &src011, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y, z , &src100, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y, z+1, &src101, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z , &src010, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z+1, &src011, mrcPixelRePart, mrcPixelHowNearest);
+ switch(mode) {
+ case 0: { /* 2x2x1 */
+ Gx = (src200 - src000 + src210 - src010 + src220 - src020
+ +src200 - src000 + src201 - src001 + src202 - src002)/6.0;
+ Gy = (src020 - src000 + src021 - src001 + src022 - src002
+ +src020 - src000 + src120 - src100 + src220 - src200)/6.0;
+ Gz = (src002 - src000 + src102 - src100 + src202 - src200
+ +src002 - src000 + src012 - src010 + src022 - src020)/6.0;
+ break;
+ }
+ default: {
+ fprintf(stderr, "Not supported mode: %d in lmrcImageEdgeEnhancementRobertsCrossOperatorSQRT\n", mode);
+ exit(EXIT_FAILURE);
+ break;
+ }
+ }
+ dst = fabs(Gx) + fabs(Gy) + fabs(Gz);
+ mrcPixelDataSet(out, x, y, z, dst, mrcPixelRePart);
+ }
+ }
+ }
+ } else { // 2D
+ for(y=1; y<in->HeaderN.y-1; y++) {
+ for(x=1; x<in->HeaderN.x-1; x++) {
+ mrcPixelDataGet(in, x-1, y-1, 0, &src00, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x-1, y, 0, &src01, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x-1, y+1, 0, &src02, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y-1, 0, &src10, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, 0, &src12, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y-1, 0, &src20, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y, 0, &src21, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y+1, 0, &src22, mrcPixelRePart, mrcPixelHowNearest);
+
+ Gx = (src20 - src00 + src21 - src01 + src22 - src02)/3.0;
+ Gy = (src02 - src00 + src12 - src10 + src22 - src20)/3.0;
+
+ dst = fabs(Gx) + fabs(Gy);
+ mrcPixelDataSet(out, x, y, 0, dst, mrcPixelRePart);
+
+ if(linfo->flagDirection) {
+ dst = atan2(Gy, Gx)*180.0/M_PI;
+ mrcPixelDataSet(&(linfo->direction[0]), x, y, 0, dst, mrcPixelRePart);
+ }
+ }
+ }
+ }
+}
+
+
--- /dev/null
+/*
+# %M% %Y% %I%
+# The latest update : %G% at %U%
+#
+#%Z% lmrcImageRoberts ver %I%
+#%Z% Created by
+#%Z%
+#%Z% Usage : lmrcImageRoberts
+#%Z% Attention
+#%Z%
+*/
+static char __sccs_id[] = "%Z%lmrcImageRoberts ver%I%; Date:%D% %Z%";
+
+#include "Memory.h"
+#include "./lmrcImageEdgeEnhancement.h"
+
+void
+lmrcImageEdgeEnhancementRobertsCrossOperatorSQRT(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode)
+{
+ mrcImageParaTypeReal x, y, z;
+ double src00, src01, src10, src11;
+ double src000, src001, src010, src011;
+ double src100, src101, src110, src111;
+ double dst;
+ double Gx, Gy, Gz;
+ int max, i;
+
+ lmrcImageEdgeEnhancementPrepare(out, in, linfo, mode);
+
+ if(1<in->HeaderN.z) { // 3D
+ for(z=0; z<in->HeaderN.z; z++) {
+ for(y=0; y<in->HeaderN.y; y++) {
+ for(x=0; x<in->HeaderN.x; x++) {
+ mrcPixelDataGet(in, x, y, z , &src000, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y, z+1, &src001, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z , &src010, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z+1, &src011, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y, z , &src100, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y, z+1, &src101, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y+1, z , &src110, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y+1, z+1, &src111, mrcPixelRePart, mrcPixelHowNearest);
+ switch(mode) {
+ case 0: { /* 2x2x1 */
+ Gx = SQR(src000 - src011) + SQR(src010 - src001); /* yz-plane */
+ Gy = SQR(src000 - src101) + SQR(src001 - src100); /* zx-plane */
+ Gz = SQR(src000 - src110) + SQR(src100 - src010); /* xy-plane */
+ dst = (Gx + Gy + Gz)/6.0;
+ break;
+ }
+ case 1: { /* 2x2x2 */
+ dst = SQR(src110-src000) + SQR(src100 - src010) /* xy-plane z=0 */
+ +SQR(src010-src000) + SQR(src000 - src010) /* yz-plane x=0 */
+ +SQR(src101-src000) + SQR(src001 - src100) /* zx-plane y=0 */
+ +SQR(src111-src001) + SQR(src101 - src011) /* xy-plane z=1 */
+ +SQR(src110-src100) + SQR(src100 - src110) /* yz-plane x=1 */
+ +SQR(src111-src010) + SQR(src011 - src110);/* zx-plane y=1 */
+ dst /= 12.0;
+ break;
+ }
+ default: {
+ fprintf(stderr, "Not supported mode: %d in lmrcImageEdgeEnhancementRobertsCrossOperatorSQRT\n", mode);
+ exit(EXIT_FAILURE);
+ break;
+ }
+ }
+ if(0<dst) {
+ dst = sqrt(dst);
+ } else {
+ dst = 0;
+ }
+ mrcPixelDataSet(out, x, y, z, dst, mrcPixelRePart);
+ }
+ }
+ }
+ } else { // 2D
+ for(y=0; y<in->HeaderN.y-1; y++) {
+ for(x=0; x<in->HeaderN.x-1; x++) {
+ mrcPixelDataGet(in, x, y, 0, &src00, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, 0, &src01, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y, 0, &src10, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y+1, 0, &src11, mrcPixelRePart, mrcPixelHowNearest);
+
+ Gx = src00 - src11;
+ Gy = src10 - src01;
+
+ dst = SQR(Gx) + SQR(Gy);
+ if(0<dst) {
+ dst = sqrt(dst/2.0);
+ } else {
+ dst = 0;
+ }
+ mrcPixelDataSet(out, x, y, 0, dst, mrcPixelRePart);
+
+ dst = atan2(Gy, Gx)*180/M_PI;
+
+ if(linfo->flagDirection) {
+ mrcPixelDataSet(&(linfo->direction[0]), x, y, 0, dst, mrcPixelRePart);
+ }
+ }
+ }
+ }
+}
+
+
+void
+lmrcImageEdgeEnhancementRobertsCrossOperatorABS(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode)
+{
+ mrcImageParaTypeReal x, y, z;
+ double src00, src01, src10, src11;
+ double src000, src001, src010, src011;
+ double src100, src101, src110, src111;
+ double dst;
+ double Gx, Gy, Gz;
+ int max, i;
+
+ lmrcImageEdgeEnhancementPrepare(out, in, linfo, mode);
+
+ if(1<in->HeaderN.z) { // 3D
+ for(z=0; z<in->HeaderN.z; z++) {
+ for(y=0; y<in->HeaderN.y; y++) {
+ for(x=0; x<in->HeaderN.x; x++) {
+ mrcPixelDataGet(in, x, y, z , &src000, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y, z+1, &src001, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z , &src010, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z+1, &src011, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y, z , &src100, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y, z+1, &src101, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y+1, z , &src110, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y+1, z+1, &src111, mrcPixelRePart, mrcPixelHowNearest);
+ switch(mode) {
+ case 0: { /* 2x2x1 */
+ Gx = fabs(src000 - src011) + fabs(src010 - src001); /* yz-plane */
+ Gy = fabs(src000 - src101) + fabs(src001 - src100); /* zx-plane */
+ Gz = fabs(src000 - src110) + fabs(src100 - src010); /* xy-plane */
+ dst = (Gx + Gy + Gz)/6.0;
+ break;
+ }
+ case 1: { /* 2x2x2 */
+ dst = SQR(src110-src000) + SQR(src100 - src010) /* xy-plane z=0 */
+ +SQR(src010-src000) + SQR(src000 - src010) /* yz-plane x=0 */
+ +SQR(src101-src000) + SQR(src001 - src100) /* zx-plane y=0 */
+ +SQR(src111-src001) + SQR(src101 - src011) /* xy-plane z=1 */
+ +SQR(src110-src100) + SQR(src100 - src110) /* yz-plane x=1 */
+ +SQR(src111-src010) + SQR(src011 - src110); /* zx-plane y=1 */
+ dst /= 12.0;
+ break;
+ }
+ default: {
+ fprintf(stderr, "Not supported mode: %d in lmrcImageEdgeEnhancementRobertsCrossOperatorSQRT\n", mode);
+ exit(EXIT_FAILURE);
+ break;
+ }
+ }
+ if(0<dst) {
+ dst = sqrt(dst);
+ } else {
+ dst = 0;
+ }
+ mrcPixelDataSet(out, x, y, z, dst, mrcPixelRePart);
+ }
+ }
+ }
+ } else { // 2D
+ for(y=0; y<in->HeaderN.y-1; y++) {
+ for(x=0; x<in->HeaderN.x-1; x++) {
+ mrcPixelDataGet(in, x, y, 0, &src00, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, 0, &src01, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y, 0, &src10, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y+1, 0, &src11, mrcPixelRePart, mrcPixelHowNearest);
+
+ Gx = src00 - src11;
+ Gy = src10 - src01;
+
+ dst = (fabs(Gx) + fabs(Gy))/2.0;
+ mrcPixelDataSet(out, x, y, 0, dst, mrcPixelRePart);
+
+ if(linfo->flagDirection) {
+ dst = atan2(Gy, Gx)*180/M_PI;
+ mrcPixelDataSet(&(linfo->direction[0]), x, y, 0, dst, mrcPixelRePart);
+ }
+ }
+ }
+ }
+}
--- /dev/null
+/*
+# %M% %Y% %I%
+# The latest update : %G% at %U%
+#
+#%Z% lmrcImageSobel ver %I%
+#%Z% Created by
+#%Z%
+#%Z% Usage : lmrcImageSobel
+#%Z% Attention
+#%Z%
+*/
+static char __sccs_id[] = "%Z%lmrcImageSobel ver%I%; Date:%D% %Z%";
+
+
+#include <stdlib.h>
+#include "./lmrcImageEdgeEnhancement.h"
+
+void
+lmrcImageEdgeEnhancementSobelOperatorSQRT(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode)
+{
+ mrcImageParaTypeReal x, y, z;
+ double src00, src01, src02;
+ double src10, src11, src12;
+ double src20, src21, src22;
+ double src000, src001, src002, src010, src011, src012, src020, src021, src022;
+ double src100, src101, src102, src110, src111, src112, src120, src121, src122;
+ double src200, src201, src202, src210, src211, src212, src220, src221, src222;
+ double dst, Gx, Gy, Gz;
+
+
+ lmrcImageEdgeEnhancementPrepare(out, in, linfo, mode);
+
+ if(1<in->HeaderN.z) { // 3D
+ for(z=0; z<in->HeaderN.z; z++) {
+ for(y=0; y<in->HeaderN.y; y++) {
+ for(x=0; x<in->HeaderN.x; x++) {
+ mrcPixelDataGet(in, x, y, z , &src000, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y, z+1, &src001, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z , &src010, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z+1, &src011, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y, z , &src100, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y, z+1, &src101, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z , &src010, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z+1, &src011, mrcPixelRePart, mrcPixelHowNearest);
+ switch(mode) {
+ case 0: { /* 3x3x1 */
+ Gx = (src200 - src000 + 2.0*(src210 - src010) + src220 - src020
+ +src200 - src000 + 2.0*(src201 - src001) + src202 - src002)/8.0;
+ Gy = (src020 - src000 + 2.0*(src021 - src001) + src022 - src002
+ +src020 - src000 + 2.0*(src120 - src100) + src220 - src200)/8.0;
+ Gz = (src002 - src000 + 2.0*(src102 - src100) + src202 - src200
+ +src002 - src000 + 2.0*(src012 - src010) + src022 - src020)/8.0;
+ break;
+ }
+ default: {
+ fprintf(stderr, "Not supported mode: %d in lmrcImageEdgeEnhancementRobertsCrossOperatorSQRT\n", mode);
+ exit(EXIT_FAILURE);
+ break;
+ }
+ }
+ dst = SQR(Gx) + SQR(Gy) + SQR(Gz);
+ if(0<dst) {
+ dst = sqrt(dst);
+ } else {
+ dst = 0;
+ }
+ mrcPixelDataSet(out, x, y, z, dst, mrcPixelRePart);
+ }
+ }
+ }
+ } else { // 2D
+ for(y=1; y<in->HeaderN.y-1; y++) {
+ for(x=1; x<in->HeaderN.x-1; x++) {
+ mrcPixelDataGet(in, x-1, y-1, 0, &src00, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x-1, y, 0, &src01, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x-1, y+1, 0, &src02, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y-1, 0, &src10, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, 0, &src12, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y-1, 0, &src20, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y, 0, &src21, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y+1, 0, &src22, mrcPixelRePart, mrcPixelHowNearest);
+
+ Gx = (src20 - src00 + 2.0*(src21 - src01) + src22 - src02)/4.0;
+ Gy = (src02 - src00 + 2.0*(src12 - src10) + src22 - src20)/4.0;
+
+ dst = SQR(Gx) + SQR(Gy);
+ if(0<dst) {
+ dst = sqrt(dst);
+ } else {
+ dst = 0;
+ }
+ mrcPixelDataSet(out, x, y, 0, dst, mrcPixelRePart);
+
+ if(linfo->flagDirection) {
+ dst = atan2(Gy, Gx)*180.0/M_PI;
+ mrcPixelDataSet(&(linfo->direction[0]), x, y, 0, dst, mrcPixelRePart);
+ }
+ }
+ }
+ }
+}
+
+void
+lmrcImageEdgeEnhancementSobelOperatorABS(mrcImage* out, mrcImage* in, lmrcImageEdgeEnhancementInfo* linfo, int mode)
+{
+ mrcImageParaTypeReal x, y, z;
+ double src00, src01, src02;
+ double src10, src11, src12;
+ double src20, src21, src22;
+ double src000, src001, src002, src010, src011, src012, src020, src021, src022;
+ double src100, src101, src102, src110, src111, src112, src120, src121, src122;
+ double src200, src201, src202, src210, src211, src212, src220, src221, src222;
+ double dst, Gx, Gy, Gz;
+
+
+ lmrcImageEdgeEnhancementPrepare(out, in, linfo, mode);
+
+ if(1<in->HeaderN.z) { // 3D
+ for(z=0; z<in->HeaderN.z; z++) {
+ for(y=0; y<in->HeaderN.y; y++) {
+ for(x=0; x<in->HeaderN.x; x++) {
+ mrcPixelDataGet(in, x, y, z , &src000, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y, z+1, &src001, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z , &src010, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z+1, &src011, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y, z , &src100, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y, z+1, &src101, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z , &src010, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, z+1, &src011, mrcPixelRePart, mrcPixelHowNearest);
+ switch(mode) {
+ case 0: { /* 2x2x1 */
+ Gx = (src200 - src000 + 2.0*(src210 - src010) + src220 - src020
+ +src200 - src000 + 2.0*(src201 - src001) + src202 - src002)/8.0;
+ Gy = (src020 - src000 + 2.0*(src021 - src001) + src022 - src002
+ +src020 - src000 + 2.0*(src120 - src100) + src220 - src200)/8.0;
+ Gz = (src002 - src000 + 2.0*(src102 - src100) + src202 - src200
+ +src002 - src000 + 2.0*(src012 - src010) + src022 - src020)/8.0;
+ break;
+ }
+ default: {
+ fprintf(stderr, "Not supported mode: %d in lmrcImageEdgeEnhancementRobertsCrossOperatorSQRT\n", mode);
+ exit(EXIT_FAILURE);
+ break;
+ }
+ }
+ dst = fabs(Gx) + fabs(Gy) + fabs(Gz);
+ if(0<dst) {
+ dst = sqrt(dst);
+ } else {
+ dst = 0;
+ }
+ mrcPixelDataSet(out, x, y, z, dst, mrcPixelRePart);
+ }
+ }
+ }
+ } else { // 2D
+ for(y=1; y<in->HeaderN.y-1; y++) {
+ for(x=1; x<in->HeaderN.x-1; x++) {
+ mrcPixelDataGet(in, x-1, y-1, 0, &src00, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x-1, y, 0, &src01, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x-1, y+1, 0, &src02, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y-1, 0, &src10, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x, y+1, 0, &src12, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y-1, 0, &src20, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y, 0, &src21, mrcPixelRePart, mrcPixelHowNearest);
+ mrcPixelDataGet(in, x+1, y+1, 0, &src22, mrcPixelRePart, mrcPixelHowNearest);
+
+ Gx = (src20 - src00 + 2.0*(src21 - src01) + src22 - src02)/4.0;
+ Gy = (src02 - src00 + 2.0*(src12 - src10) + src22 - src20)/4.0;
+
+ dst = fabs(Gx) + fabs(Gy);
+ mrcPixelDataSet(out, x, y, 0, dst, mrcPixelRePart);
+
+ if(linfo->flagDirection) {
+ dst = atan2(Gy, Gx)*180.0/M_PI;
+ mrcPixelDataSet(&(linfo->direction[0]), x, y, 0, dst, mrcPixelRePart);
+ }
+ }
+ }
+ }
+}
+
WORLDNAME=Tools
WORLDNAME=Tools
WORLDNAME=Tools
+WORLDNAME=Tools
# OptionControlFile
# FileFormat
-"-i","-i[nput]","InputDataFile","Essential","1","1","In","inFile","NULL"
-"-o","-o[utput]","OutputDataFile","Essential","1","1","Out","outFile","NULL"
+"-i","-i[nput]","InputDataFile","Essential","1","1","In","inFile::mrcImage","NULL"
+"-o","-o[utput]","OutputDataFile","Essential","1","1","Out","outFile::mrcImage","NULL"
+"-od","-o[utput]d[irection]","Output: Direction","Optional","1","1","OutDirection","outFile::mrcImage","NULL"
"-c","-c[onfig]","ConfigurationFile","Optional","1","1","configFile","inFile","NULL"
"-m","-m[ode]","Mode","Optional","1","1","mode","Integer","0"
char* Out;
FILE* fptOut;
+ long flagOutDirection;
+ char* OutDirection;
+ FILE* fptOutDirection;
+
long flagconfigFile;
char* configFile;
FILE* fptconfigFile;
}
SBREAK;
}
+ SCASE("od") {
+ if(i+1<argc) {
+ info->OutDirection = stringGetNthWord(argv[i+1], 1, " ,");
+ i++;
+ info->flagOutDirection++;
+ } else {
+ usage(argv[0]);
+ exit(EXIT_FAILURE);
+ }
+ SBREAK;
+ }
SCASE("c") {
if(i+1<argc) {
info->configFile = stringGetNthWord(argv[i+1], 1, " ,");
{
info->fptIn = NULL; info->flagIn = 0;
info->fptOut = NULL; info->flagOut = 0;
+ info->fptOutDirection = NULL; info->flagOutDirection = 0;
info->fptconfigFile = NULL; info->flagconfigFile = 0;
info->mode = 0; info->flagmode = 0;
}
info->fptOut = fileOpen(info->Out, "w");
}
+ if(info->flagOutDirection) {
+ info->fptOutDirection = fileOpen(info->OutDirection, "w");
+ }
+
if(info->flagconfigFile) {
info->fptconfigFile = fileOpen(info->configFile, "r");
}
#define DEBUG
#include "genUtil.h"
#include "mrcImage.h"
+#include "lmrcImageEdgeEnhancement.h"
/*
Example:
int
main(int argc, char* argv[])
{
+ mrcImage in;
+ mrcImage out;
mrcImageEdgeEnhancementInfo info;
+ lmrcImageEdgeEnhancementInfo linfo;
init0(&info);
argCheck(&info, argc, argv);
init1(&info);
+
DEBUGPRINT("Program Start\n");
+ linfo.flagDirection = info.flagOutDirection;
+
+ mrcFileRead(&in, info.In, "in main", 0);
+
+ lmrcImageEdgeEnhancement(&out, &in, &linfo, info.mode);
+
+ mrcFileWrite(&out, info.Out, "in main", 0);
+ if(info.flagOutDirection) {
+ mrcFileWrite(&(linfo.direction[0]), info.OutDirection, "in main", 0);
+ }
exit(EXIT_SUCCESS);
}
additionalUsage()
{
fprintf(stderr, "----- Additional Usage -----\n");
+ lmrcImageEdgeEnhancementModePrint(stderr);
}
--- /dev/null
+<HTML>
+<HEAD>
+<TITLE>mrcImageEdgeEnhancement</TITLE>
+</HEAD>
+<BODY>
+<H1>mrcImageEdgeEnhancement</H1>
+<H2>Usage</H2>
+<PRE>
+Usage: mrcImageEdgeEnhancement
+Options:
+ [-i[nput] In (NULL ).as(inFile::mrcImage ) ] :Essential :InputDataFile
+ [-o[utput] Out (NULL ).as(outFile::mrcImage ) ] :Essential :OutputDataFile
+ [-o[utput]d[irection]OutDirection (NULL ).as(outFile::mrcImage ) ] :Optional :Output: Direction
+ [-c[onfig] configFile (NULL ).as(inFile ) ] :Optional :ConfigurationFile
+ [-m[ode] mode (0 ).as(Integer ) ] :Optional :Mode
+----- Additional Usage -----
+mode: 2 : Roberts Cross(SQRT)
+mode: 3 : Roberts Cross(ABS)
+mode: 4 : Prewitt(SQRT)
+mode: 5 : Prewitt(ABS)
+mode: 6 : Sobel(SQRT)
+mode: 7 : Sobel(ABS)
+</PRE>
+</BODY>
+</HTML>
-Q 1 0 5.25x1+47+0 'Close'
-I 1 0 1 1 0 1 -1x1+1+1.500000 ' ' 'In' 'InputDataFile' i
-O 1 0 1 1 0 1 -1x1+1+3.000000 ' ' 'Out' 'OutputDataFile' o
- -I 1 0 1 0 0 1 -1x1+1+4.500000 ' ' 'configFile' 'ConfigurationFile' c
- -i 1 0 1 0 0 -1x1+1+6.000000 0 0 0 0 0 'mode' 'Mode' m
+ -O 1 0 1 0 0 1 -1x1+1+4.500000 ' ' 'OutDirection' 'Output: Direction' od
+ -I 1 0 1 0 0 1 -1x1+1+6.000000 ' ' 'configFile' 'ConfigurationFile' c
+ -i 1 0 1 0 0 -1x1+1+7.500000 0 0 0 0 0 'mode' 'Mode' m
-E
-E
-E
--- /dev/null
+include ../../Config/Define.inc
+include ../../../Config/Define.inc
+include ../../../../Config/Define.inc
+include ../../../../../Config/Define.inc
+
+all: help exec
+
+help:
+ @echo "----- Help Message Check -----"
+ @../$(OSTYPE)/$(OBJECTNAME) -h
+
+exec:
+ @echo "----- Execution Check -----"
+ ../$(OSTYPE)/$(OBJECTNAME) -i data/Lighthouse.mrc -o data/Lighthouse.edge.2 -m 2
+ ../$(OSTYPE)/$(OBJECTNAME) -i data/Lighthouse.mrc -o data/Lighthouse.edge.3 -m 3
+ ../$(OSTYPE)/$(OBJECTNAME) -i data/Lighthouse.mrc -o data/Lighthouse.edge.4 -m 4
+ ../$(OSTYPE)/$(OBJECTNAME) -i data/Lighthouse.mrc -o data/Lighthouse.edge.5 -m 5
+ ../$(OSTYPE)/$(OBJECTNAME) -i data/Lighthouse.mrc -o data/Lighthouse.edge.6 -m 6
+ ../$(OSTYPE)/$(OBJECTNAME) -i data/Lighthouse.mrc -o data/Lighthouse.edge.7 -m 7
+ @echo "----- Calc check -----"
+
+clean:
--- /dev/null
+../../../../../..//data/mrcImageEdgeEnhancement
\ No newline at end of file
{
fprintf(stderr, "Usage: %s\n", thisProgram);
fprintf(stderr, "Options:\n");
- fprintf(stderr, " [-i[nput] In (NULL ).as(inFile ) ] :Essential :InputDataFile\n");
- fprintf(stderr, " [-o[utput] Out (NULL ).as(outFile ) ] :Essential :OutputDataFile\n");
+ fprintf(stderr, " [-i[nput] In (NULL ).as(inFile::mrcImage ) ] :Essential :InputDataFile\n");
+ fprintf(stderr, " [-o[utput] Out (NULL ).as(outFile::mrcImage ) ] :Essential :OutputDataFile\n");
+ fprintf(stderr, " [-o[utput]d[irection]OutDirection (NULL ).as(outFile::mrcImage ) ] :Optional :Output: Direction\n");
fprintf(stderr, " [-c[onfig] configFile (NULL ).as(inFile ) ] :Optional :ConfigurationFile\n");
fprintf(stderr, " [-m[ode] mode (0 ).as(Integer ) ] :Optional :Mode\n");
additionalUsage();