C PROGRAM JGSP1.FT C C ---------------- C C C ### SUBROUTINE JGSP1 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 JULY 26, 1977 C JAN 27, 1977 C C C INTRODUCTION C ------------ C JGSP1.FT IS A SUBROUTINE USED WITH JGSPLOT.FT C C IT COMPUTES THE JOINT PROBABILITY MATRICES P0, P45, P90, P135 C INSIDE OF THE /U COMPUTING WINDOW OF (MEM,IBYTE) USING C A DISTANCE D GIVEN IN ICNUM. C OPDEFS C ------ S OPDEF TADI 1400 S OPDEF DCAI 3400 S OPDEF ISZI 2400 C S OPDEF DISP1 6435 S OPDEF DISP2 6436 C C S OPDEF SWAB 7431 S OPDEF SWBA 7447 C S OPDEF MUY 7405 S OPDEF DVI 7407 S OPDEF MQA 7501 S OPDEF MQL 7421 S OPDEF KRS 6034 S OPDEF BSW 7002 C C C C C [1] INIT S ENTRY JGSP1 S JGSP1, BLOCK 2 C C C IF /I THEN ZERO BMJ ELSE COLOR IT 75. MCOLOR=4 IP=ISW(9) ISHADE=75 IF(IP)1001,1002,1001 1001 ISHADE=0 1002 CALL BMOMNI(JBM,JHGH,0,0,ISHADE,IBUF1,MCOLOR) C DEFINE THE SCATTER PLOT OFFSETS C LX1=MAX(ICNUM,KX1) LX2=MIN(KX2,(256-ICNUM)) LY1=MAX(ICNUM,KY1) LY2=KY2 C C DEFINE THE MIN WINDOW KX1=256 KX2=-1 KY1=256 KY2=-1 C C C C IF NOT /1 THEN C GET THE RANGE OF THE GRAY VALUES WHICH WILL BE USED C TO NORMALIZE THE DATA. C G'(X,Y)=(IHIGH/ILOW)*(G(X,Y)-ILOW) C IF /1 THEN THE RANGE IS SET TO [0:255] C ASSUME STORE IN 1 IMAGE IOFFSET=0 C DEFINE FULL RANGE ILOW=0 IHIGH=255 ISW1=ISW(28) S TAD \ISW1 S SZA CLA S JMP \1003 C C ILOW=ITMPSTK IHIGH=0 S TAD \ITMPSTK# /ITMPSTK(2) S DCA \IHIGH C C SET THE OFFSET SO THAT STORE IN QUADRANTS IOFFSET=128 C C C [2] PROCESS IMAGE TO GENERATE PK C ZERO THE DATUM COUNT 1003 FA=0.0 DO 100 IY1=LY1,LY2 C S CPAGE 3 S JMS TTYCTL S JMP \998 /RETURN C S CLA CMA S TAD \IY1 S DISP2 C DO 100 IX1=LX1,LX2 S TAD \IX1 S DISP1 C C GET PIXELS IX=IX1-1 IY=IY1-1 S JMS GETPIXEL /GET PIXEL, SCALE AND DIVIDE BY 4 I=IZ C C@ IY=IY1-1 IX=(IX1-1)+ICNUM S JMS GETPIXEL /GET PIXEL, SCALE AND DIVIDE BY 4 J0=IZ C IY=(IY1-1)+ICNUM C@ IX=(IX1-1)+ICNUM S JMS GETPIXEL /GET PIXEL, SCALE AND DIVIDE BY 4 J45=IZ C C@ IY=(IY1-1)+ICNUM IX=(IX1-1) S JMS GETPIXEL /GET PIXEL, SCALE AND DIVIDE BY 4 J90=IZ C IY=(IY1-1)+ICNUM IX=(IX1-1)-ICNUM S JMS GETPIXEL /GET PIXEL, SCALE AND DIVIDE BY 4 J135=IZ C C C C [2.1] IF /I THEN PK(I,J)' ELSE COLOR PK(I,J) BLACK. C DEFINE THE OUTPUT MEMORY MEM=JBM IBYTE=JHGH C C DO 0 DEGREES IX=I IY=J0 IZ=255 S TAD \IP S SNA CLA S JMP \200 C CALL FETCH2D C CLIP IZ AT 255 S INC \IZ S CLA S TAD \IZ S TAD (-D255 S SMA S CLA S TAD (D255 S DCA \IZ S\200, JMS WRT2D C C C DO 45 DEGREES IX=I+IOFFSET IY=J45 IZ=255 S TAD \IP S SNA CLA S JMP \210 C CALL FETCH2D C CLIP IZ AT 255 S INC \IZ S CLA S TAD \IZ S TAD (-D255 S SMA S CLA S TAD (D255 S DCA \IZ S\210, JMS WRT2D C C C DO 90 DEGREES IX=I IY=J90+IOFFSET IZ=255 S TAD \IP S SNA CLA S JMP \220 C CALL FETCH2D C CLIP IZ AT 255 S INC \IZ S CLA S TAD \IZ S TAD (-D255 S SMA S CLA S TAD (D255 S DCA \IZ S\220, JMS WRT2D C C C DO 135 DEGREES IX=I+IOFFSET IY=J135+IOFFSET IZ=255 S TAD \IP S SNA CLA S JMP \230 C CALL FETCH2D C CLIP IZ AT 255 S INC \IZ S CLA S TAD \IZ S TAD (-D255 S SMA S CLA S TAD (D255 S DCA \IZ S\230, JMS WRT2D C C 100 CONTINUE C C C [3] IF /T THEN PRINT SOME OF NORMAN PRESSMAN'S "T" STATISTICS C PF PD(I,J). IF(ISW(20))300,998,300 300 CALL JGSP2 C C C [4] RETURN S \998, RETRN JGSP1 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 C ************************************************************ C SUBROUTINE: G E T P I X E L (INTERNAL) C ************************************************************ C S CPAGE 3 S RGETPI, JMP I GETPIXEL S GETPIXEL, 0000 /ENTRY C C G'(X,Y)=(INUMERATOR/IDENOMINATOR)*(G(X,Y)-ILOW)/2 INUMERATOR=255 IDENOMINATOR=IHIGH-ILOW C MEM=IBM1 IBYTE=IHGH1 CALL FETCH2D C C IF NOT /1THEN CONTINUE ELSE RETURN WITH IZ UNSCALED; S TAD \ISW1 S SZA CLA S JMP RGETPIXEL C C C IZ=IZ-ILOW C S SWAB S TAD \IZ S MQL S CPAGE 2 S MUY S \INUMERATOR C S CPAGE 2 S DVI S \IDENOMINATOR S CLA S SWBA C C C DIVIDE BY 2 S MQA S CLL RAR S DCA \IZ S JMP RGETPIXEL C C ************************************************** C *SUBROUTINE W R T 2 D C ************************************************ C SAVE THE MINIMUM COMPUTING WINDOW IN C FOR PASSING VIA (KX1,KX2,KY1,KY2) LATER TO JGSP2 S CPAGE 3 S RWRT2D, JMP I WRT2D S WRT2D, 0 C C FIND MIN WINDOW C COMPUTE: KX1=MIN(KX1,IX) S TAD \KX1 S CIA S TAD \IX S SMA CLA S JMP \1600 /NO KX1=IX C C COMPUTE: KY1=MIN(KY1,IY) S \1600, TAD \KY1 S CIA S TAD \IY S SMA CLA S JMP \1601 /NO KY1=IY C C COMPUTE: KX2=MAX(KX2,IX) S \1601, TAD \KX1 S CIA S TAD \IX S SPA CLA S JMP \1602 /NO KX2=IX C C COMPUTE: KY2=MAX(Y2,IY) S \1602, TAD \KY2 S CIA S TAD \IY S SPA CLA S JMP \1603 /NO KY2=IY C C C WRITE OUT POINT 1603 CALL PACK2D C C COUNT UP THE DATUM COUNTER FA S ISZ \FA S SKP S ISZ \FA# S CLA C S JMP RWRT2D C *****PARAMETERS***** S PIH, \IH /POINTER J0=0 J45=0 J90=0 J135=0 END