C++********************************************************************* C C FOUR1A.F C OPFILEC FEB 03 ARDEAN LEITH C C ********************************************************************** C=* FROM: SPIDER - MODULAR IMAGE PROCESSING SYSTEM. AUTHOR: J.FRANK * C=* Copyright (C) 1985-2005 Health Research Inc. * C=* * C=* HEALTH RESEARCH INCORPORATED (HRI), * C=* ONE UNIVERSITY PLACE, RENSSELAER, NY 12144-3455. * C=* * C=* Email: spider@wadsworth.org * C=* * C=* This program is free software; you can redistribute it and/or * C=* modify it under the terms of the GNU General Public License as * C=* published by the Free Software Foundation; either version 2 of the * C=* License, or (at your option) any later version. * C=* * C=* This program is distributed in the hope that it will be useful, * C=* but WITHOUT ANY WARRANTY; without even the implied warranty of * C=* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * C=* General Public License for more details. * C=* * C=* You should have received a copy of the GNU General Public License * C=* along with this program; if not, write to the * C=* Free Software Foundation, Inc., * C=* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * C=* * C ********************************************************************** C C 'FQ' : QUICK FILTERING (IN CORE, 2-D OR 3-D, AS NEED BE) C APPLIES FOURIER FILTERS TO 2-D OR 3-D REAL PICTURES C C IMAGE_PROCESSING_ROUTINE C C23456789012345678901234567890123456789012345678901234567890123456789012 C--********************************************************************* SUBROUTINE FOUR1A INCLUDE 'CMBLOCK.INC' INCLUDE 'CMLIMIT.INC' COMMON /COMMUN/ FILNAM CHARACTER (LEN=MAXNAM) :: FILNAM REAL, ALLOCATABLE, DIMENSION(:,:) :: BB REAL, ALLOCATABLE, DIMENSION(:,:,:) :: BC DATA LUN1,LUN2/21,22/ MAXIM = 0 CALL OPFILEC(0,.TRUE.,FILNAM,LUN1,'O',IFORM,NSAM,NROW,NSLICE, & MAXIM,'INPUT',.FALSE.,IRTFLG) IF (IRTFLG .NE. 0) RETURN IF (IFORM .NE.1 .AND. IFORM.NE.3) THEN GOTO 999 ELSEIF (IFORM .EQ.1 .AND. NROW.EQ.1) THEN CALL ERRT(44,'FOUR1A ',NE) GOTO 999 ENDIF MAXIM = 0 CALL OPFILEC(LUN1,.TRUE.,FILNAM,LUN2,'U',IFORM,NSAM,NROW,NSLICE, & MAXIM,'OUTPUT',.FALSE.,IRTFLG) IF (IRTFLG. NE. 0) GOTO 999 1000 WRITE(NOUT,1009) 1009 FORMAT & (' 1 - LOW-PASS, 2 - HIGH-PASS',/, & ' 3 - GAUSS LOW-PASS, 4 - GAUSS HIGH-PASS',/, & ' 5 - FERMI LOW-PASS, 6 - FERMI HIGH-PASS',/, & ' 7 - BUTER LOW-PASS, 8 - BUTER HIGH-PASS') CALL RDPRI1S(IOPT,NOT_USED,'FILTER TYPE (1-8)',IRTFLG) IF (IOPT .LT. 1 .OR. IOPT .GT. 8) THEN CALL ERRT(102,'ILLEGAL VALUE FOR FILTER TYPE ',IOPT) GOTO 1000 ENDIF IF (FCHAR(4:5) .EQ. 'NP') THEN N2S = NSAM N2R = NROW N2L = NSLICE ELSE N2S = 2*NSAM N2R = 2*NROW IF (NSLICE.GT.1) THEN N2L = 2*NSLICE ELSE N2L=1 ENDIF ENDIF LSD = N2S+2-MOD(N2S,2) IF (IFORM .EQ. 1) THEN WRITE(NOUT,30111) N2S,N2R 30111 FORMAT(' DIMENSIONS USED: ',3I6) ALLOCATE (BB(LSD,N2R), STAT=IRTFLG) IF (IRTFLG .NE. 0) THEN CALL ERRT(46,'FOUR1A, BB',IER) GOTO 999 ENDIF CALL FQ_Q(LUN1,LUN2,BB,LSD,N2S,N2R,NSAM,NROW,IOPT) ELSE WRITE(NOUT,30111) N2S,N2R,N2L ALLOCATE (BC(LSD,N2R,N2L), STAT=IRTFLG) IF (IRTFLG .NE. 0) THEN CALL ERRT(46,'FOUR1A, BC',IER) GOTO 998 ENDIF CALL FQ3_P(LUN1,LUN2,BC,LSD, & N2S,N2R,N2L,NSAM,NROW,NSLICE,IOPT) ENDIF IF (IOPT.LT.0) THEN CALL ERRT(38,'FQ',NE) ENDIF 998 IF (ALLOCATED(BB)) DEALLOCATE(BB) IF (ALLOCATED(BC)) DEALLOCATE(BC) 999 CLOSE(LUN1) CLOSE(LUN2) END