C PROGRAM ISOLATE.FT C ---------------- C C PETER LEMKIN C IMAGE PROCESSING UNIT, DCBD C NATIONAL CANCER INSTITUTE C NATIONAL INSTITUTES OF HEALTH C 9000 ROCKVILLE PIKE C BETHESDA, MD. 20014 C C NOV 30, 1977 C NOV 29, 1977 C NOV 28, 1977 C SEPT 16, 1977 C SEPT 15, 1977 C SEPT 11, 1977 C SEPT 8, 1977 C SEPT 7, 1977 C AUG 25, 1977 C AUG 24, 1977 C AUG 23, 1977 C C INTRODUCTION C ------------ C ISOLATE.FT IS A CHAINED PROGRAM USED WITH BMON2 C IT RECEIVES ITS ARGUMENTS FROM THE CD AREA AND THE IBM1,IHGH1 C VARIABLES IN COMMON. THE ARGUMENTS ARE THEN CHECKED C AND THEN ALL PIXELS OF VALUE 1 ARE ISOLATED INTO C 8-NEIGHBOR ADJACENT PIXELS OF VALUE > 1. C C _ISOLATE,,(/T),(Opt. light region sens. thr t), C (painting termination threshold p) C - Given a propagation input image C where the points to be propagated are in and C the actual gray value image corresponding to this is in C then determine shear lines between CCi's in BMi and in the C copy of BMi1==>BMj draw the shear lines. C based on the detection of lightened texture regions between C the CCi objects masked by 1's. C C Coding scheme C ------------------- C 0 - background C 1 - propagatable pixels C 2:255 - connected component objects. C C The minimum rectangles are found for all objects C and then each pair is tested to determine if a path exists between C the objects (no 0's breaking the path). If this is C the case, then futrther testing is performed with a moving C window perpendicular to the line joining C the two objects. C C If /T is specified, then trace the lines and window scans C in BMj'. C C Thresholds t and p are defaulted to 10% and 2. C OPDEFS C ------ C S OPDEF RIF 6224 S OPDEF DMAGO 6070 S SKPDF DMASKP 6071 S OPDEF DMAWC 6072 S OPDEF DMACA 6073 S OPDEF DMACLR 6074 S OPDEF EXDMA1 6524 S OPDEF EXDMA2 6525 C C S OPDEF LQDT1 6375 S OPDEF LQDT2 6376 C S OPDEF TADI 1400 S OPDEF DCAI 3400 C S OPDEF DISP1 6435 S OPDEF DISP2 6436 C C S OPDEF SWAB 7431 S OPDEF SWBA 7447 C S OPDEF SHL 7413 S OPDEF MUY 7405 S OPDEF DVI 7407 C S OPDEF MQA 7501 S OPDEF MQL 7421 S OPDEF KRS 6034 S OPDEF BSW 7002 C C S OPDEF LDXP 6443 S OPDEF LDYP 6444 C C C IBUF1-4 ALLOCATION C ------------------ C IBUF1 - MIN Y C IBUF2 - MAX Y C IBUF3 - MIN X C IBUF4 - MAX X C IH[1:512] - SCRATCH LINE (X,Y) COMPUTATION AREA FOR CCI:CCJ. C C [1] INITIALIZATION WRITE(1,995) CALL OOPEN('LPT','ISOLATE') C WRITE(4,995) 995 FORMAT('1 ISOLATE 11/30/77 - 2:28PM') CALL DAYTIME(1) CALL DAYTIME(3) C C C GET THE BM NAME S TAD (4040 /" " S DCA \I S TAD \IHGH1 S RAR /BIT 11==>LINK S CLA S TAD (1000 /"H@" S SZL /ADD "H" IF HIGH PART S DCA \I S CLA C C GET THE BM NAME S TAD (4040 /" " S DCA \K S TAD \IHGH2 S RAR /BIT 11==>LINK S CLA S TAD (1000 /"H@" S SZL /ADD "H" IF HIGH PART S DCA \K S CLA C C GET THE BM NAME S TAD (4040 /" " S DCA \J S TAD \JHGH S RAR /BIT 11==>LINK S CLA S TAD (1000 /"H@" S SZL /ADD "H" IF HIGH PART S DCA \J S CLA C C C SET THE LIGHT REGION SENSITIVITY TO 10% IF SET TO 0% S TAD \ICNUM S SNA S TAD (D10 S DCA \ICNUM C C SET THE PAINT CYT/BACK RATIO C TO 2 DEFAULT S TAD \ICNUM# S SZA S TAD (2 S DCA \ICNUM# S TAD \ICNUM# S DCA \IY C C C SET THE MAX WINDOW TO [1:254] KX1=MAX(2,KX1) KY1=MAX(2,KY1) KX2=MIN(255,KX2) KY2=MIN(255,KY2) IZ=ICNUM DO 250 INDEX=1,4,3 250 WRITE(INDEX,251)JBM,J,IBM1,I,IBM2,K,KX1-1,KX2-1,KY1-1,KY2-1 1,IZ,IY 251 FORMAT(' BM',I1,A1,'<==CC(BM',I1,A1,'), GS(BM',I1,A1,,') [',I3 1,':',I3,' , ',I3,':',I3,'], HEUR THR=',I3,'%' 2,', PAINT SENS=',I3,'%') C C C [2] VERIFY BM SPECS C@S JMS CKIN S JMS CKOUT S JMS CKIN2 C C C [2.1] GET THE OUTPUT WINDOW OFFSETS IXPOSITION=LSAVE(13,JBM+1) IYPOSITION=LSAVE(14,JBM+1) C C C [2.2] COPY BMJ (AND BMJ' IF /T)<==ZERO C COLOR IT ZERO DO 220 I=1,512 220 IBUF1(I)=0 C MEM=JBM DO 222 IVAL=1,257,3 IY=IVAL-1 IBYTE=JHGH CALL T3BUF(IBUF1,1) IF(ISW(20))223,222,223 223 IBYTE=1-JHGH CALL T3BUF(IBUF1,1) 222 CONTINUE C C C C [2.2.1] INITIAL 256 MIN WINDOWS TO NULL NCMAX=-1 DO 221 I=1,256 IBUF1(I)=257 IBUF2(I)=-1 IBUF3(I)=257 221 IBUF4(I)=-1 C C C [2.3] COPY NON-ZERO PIXELS INTO BMJ DO 230 IY1=KY1,KY2 C S CPAGE 3 S JMS TTYCTL /TEST FOR TTY INPUTS S JMP \998 /ERROR RETURN: ABORT C IY=IY1-1 S TAD \IYPOSITION S TAD \IY S LDYP C S TAD \IY S DISP2 /PUT BMY ADDRESS IN RIGHT LED'S C C READ LINE IY ==> IH BUFFER. MEM=IBM1 IBYTE=IHGH1 CALL T3BUF(IH,2) C C DO 231 IX1=KX1,KX2 IX=IX1-1 S TAD \IX S DISP1 /PUT BMX ADDRESS IN LEFT LED'S C C FOLLOW CURSOR IN BMJ S TAD \IXPOSITION S TAD \IX S LDXP C C C IZ<==IH[IX1] S CLA CMA S TAD PIH S CPAGE 5 S TAD \IX1 S DCA 7 S TADI 7 S DCA \IZ C C C IF IZ > 1 C THEN UPDATE MINIMUM RECTANGLE FOR CC# IZ S TAD (-2 S TAD \IZ S SMA CLA S JMS SETMINRECT C 231 CONTINUE C C COPY LINE IY ==>BMJ MEM=JBM IBYTE=JHGH CALL T3BUF(IH,3) C 230 CONTINUE C [3] PRINT THE MINIMU RECTANGLES FOR EACH CC. C*************DEBUG****** C@S 6344 /FBW4 C@S AND (4000 C@S SNA CLA C@S JMP \1999 /NO WRITE(4,1998)NCMAX 1998 FORMAT(' NCMAX=',I5) C DO 1997 I=2,NCMAX IY1=IBUF1(I) IY2=IBUF2(I) IX1=IBUF3(I) IX2=IBUF4(I) C IF IY2 =-1 C THEN IGNORE S TAD \IY2 S SPA CLA S JMP \1997 WRITE(4,1996)I,IX1,IX2,IY1,IY2 1996 FORMAT(' CC#',I3,' [',I3,':',I3,',',I3,':',I3,']') 1997 CONTINUE 1999 CONTINUE C***************************** C C C [4] PASS THE NUMBER OF CC'S VIA IVAL AND GO ISOLATE ALL [I,J] C PAIRS CONNECTED BY 1'S. IVAL=NCMAX CALL ISOL1 C C C [999] RETURN GOTO 998 999 WRITE(1,996) 996 FORMAT('BAD BM SPECIFICATION!') 998 CALL DAYTIME(1) CALL DAYTIME(4) CALL OCLOSE C C CALL CHAIN('BMON2') C*************************************************** C *PROCEDURE C K O U T C****************************************************** C C C CHECK WHETHER THE OUTPUT BM SPEC IS LEGAL ELSE GOTO 999. S CPAGE 3 SRCKOUT, JMP I CKOUT S CKOUT, 0 /ENTRY C C [1] TEST IF KOUTFILE="BM" S TAD \KOUTFILE S CIA S TAD BMTEXT S SZA CLA S JMP \999 /FAILED C C [2] TEST IF (KOUTFILE(2) LAND '7700)=DIGIT S TAD \KOUTFILE# S BSW S AND (0077 S TAD (-60 /"0" S SPA S JMP \999 /NO, FAILED S TAD (-D8 /"7" TEST S SMA CLA S JMP \999 /FAILED S JMP RCKOUT /OK. C C C*************************************************** C *PROCEDURE C K I N C****************************************************** C C C CHECK WHETHER THE INPUT BM SPEC IS LEGAL ELSE GOTO 999. S CPAGE 3 SRCKIN, JMP I CKIN S CKIN, 0 /ENTRY C C [1] TEST IF BMI1="BM" S TAD \SFILE S CIA S TAD BMTEXT S SZA CLA S JMP \999 /FAILED C C [2] TEST IF (BMI1(2) LAND '7700)=DIGIT S TAD \SFILE# S BSW S AND (0077 S TAD (-60 /"0" S SPA S JMP \999 /NO, FAILED S TAD (-D8 /"7" TEST S SMA CLA S JMP \999 /FAILED S JMP RCKIN /OK. C C C*************************************************** C *PROCEDURE C K I N 2 C****************************************************** C C C CHECK WHETHER THE INPUT BM SPEC IS LEGAL ELSE GOTO 999. S CPAGE 3 SRCKIN2, JMP I CKIN2 S CKIN2, 0 /ENTRY C C [1] CHECK FIRST IBM1 SPEC S JMS CKIN C C C [2] TEST IF BMI2="BM" S TAD \SEXT S CIA S TAD BMTEXT S SZA CLA S JMP \999 /FAILED C C [3] TEST IF (BMI2((6) LAND '7700)=DIGIT S TAD \SEXT# S BSW S AND (0077 S TAD (-60 /"0" S SPA S JMP \999 /NO, FAILED S TAD (-D8 /"7" TEST S SMA CLA S JMP \999 /FAILED S JMP RCKIN2 /OK. C C C ********************************************************* C SUBROUTINE: S E T M I N R E C T C ********************************************************* C COMPUTE RUNNING MINIMUM RECTANGLE FOR CC # IZ C C S CPAGE 3 S RSETMINRECT, JMP I SETMINRECT S SETMINRECT, 0 C C C [SMR.0] COMPUTE NCMAX C COMPUTE: NCMAX=MAX(NCMAX,IZ) S TAD \NCMAX S CIA S TAD \IZ S CLL RAL S CLA S TAD \IZ S SNL S DCA \NCMAX S CLA C C C [SMR.1] GET LAST MIN RECT(IZ) C (TOP Y) C COMPUTE: I11=IBUF1(IZ) S CLA CMA S TAD PIBUF1 S CPAGE 5 S TAD \IZ S DCA 24 S TADI 24 S DCA \I11 C C (BOTTOM Y) C COMPUTE: I12=IBUF2(IZ) S CLA CMA S TAD PIBUF2 S CPAGE 5 S TAD \IZ S DCA 25 S TADI 25 S DCA \I12 C C (LEFT X) C COMPUTE: I13=IBUF3(IZ) S CLA CMA S TAD PIBUF3 S CPAGE 5 S TAD \IZ S DCA 26 S TADI 26 S DCA \I13 C C (RIGHT X) C COMPUTE: I14=IBUF4(IZ) S CLA CMA S TAD PIBUF4 S CPAGE 5 S TAD \IZ S DCA 27 S TADI 27 S DCA \I14 C C C [SMR.2] COMPUTE NEXT RUNNING MIN RECT(IZ) C COMPUTE: I11=MIN(I11,IY1) S TAD \I11 S CIA S TAD \IY1 S CLL RAL S CLA S TAD \IY1 S SZL S DCA \I11 S CLA C C COMPUTE: I12=MAX(I12,IY1) S TAD \I12 S CIA S TAD \IY1 S CLL RAL S CLA S TAD \IY1 S SNL S DCA \I12 S CLA C C COMPUTE: I13=MIN(I13,IX1) S TAD \I13 S CIA S TAD \IX1 S CLL RAL S CLA S TAD \IX1 S SZL S DCA \I13 S CLA C C COMPUTE: I14=MAX(I14,IX1) S TAD \I14 S CIA S TAD \IX1 S CLL RAL S CLA S TAD \IX1 S SNL S DCA \I14 S CLA C C C [SMR.3] SAVE NEW MIN RECT S CPAGE 4 S TAD \I11 /TOP Y S DCAI 24 C S CPAGE 4 S TAD \I12 /BOTTOM Y S DCAI 25 C S CPAGE 4 S TAD \I13 /LEFT X S DCAI 26 C S CPAGE 4 S TAD \I14 /RIGHT X S DCAI 27 C C C [SMR.4] RETURN S JMP RSETMINRECT C ************************************************************ C SUBROUTINE: T T Y C T L (INTERNAL) C ************************************************************ C S CPAGE 3 S RTTYC, JMP I TTYCTL S TTYCTL, 0000 /ENTRY C S KSF /ANYTHING TYPED S JMP NORMAL /NO, RETURN NORMALLY S KRB /GET TYPED CHARACTER S AND (0177 /TAKE CARE OF PARITY PROBLEMS S TAD (-17 /TEST FOR CTRL/O S SNA /SKIP IF NOT CTRL/O S JMP RTTYC /ABORT CALLING ROUTINE (ERROR RETURN) S TAD (-4 /TEST FOR CTRL/S [-17-4=-23(OCTAL)] S SZA CLA /SKIP IF CTRL/S S JMP NORMAL /NOT CTRL/O OR CTRL/S SO RETURN NORMALLY C S SLEEP,KSF /WAIT FOR CTRL/Q S JMP SLEEP /KEEP WAITING S KRB /READ CHARACTER S AND (0177 S TAD (-17 /IS IT A CTRL/O? S SNA /SKIP IF NOT S JMP RTTYC /YES, ABORT S TAD (-2 /TEST FOR CTRL/Q (-17-2=-21 OCTAL) S SZA CLA /SKIP IF SO S JMP SLEEP /NOPE, KEEP SLEEPING C S NORMAL,INC TTYCTL /INCREMENT RETURN ADDRESS FOR NORMAL RETURN S CLA /SAFETY VALVE S JMP RTTYC /RETURN C************** P A R A M E T E R S ************* S PIH, \IH S PIBUF1, \IBUF1 S PIBUF2, \IBUF2 S PIBUF3, \IBUF3 S PIBUF4, \IBUF4 S PI10, \I10 S BMTEXT, TEXT /BM/ END