C PROGRAM RLTX2.FT C ---------------- C C SUBROUTINE RLTX2(JP0,KX1,KX2,KY1,KY2,IDB,IOUTSPOOL) 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 JAN 17, 1977 C JAN 16, 1977 C JAN 6, 1977 C NOV 16, 1976 C NOV 15, 1976 C NOV 11, 1976 C OCT 22, 1976 C OCT 15, 1976 C OCT 14, 1976 C OCT 13, 1976 C OCT 1, 1976 C C C C INTRODUCTION C ------------ C RLTX2.FT IS A SUBROUTINE USED WITH RLTXTURE.FT C AND THEN 5 RUN LENGTH TEXTURE MEASURES ARE COMPUTED C ON THE IMPUT BMI1 IMAGE AND REPORTED ON THE TTY AND LPT. C THE MEASURES ARE DERIVED FROM ANALYSIS OF THE 4 DIRECTION C RUN LENGTH HISTOGRAMS. THIS IS DESCRIVED IN THE PAPER: C "TEXTURE ANALYSIS USING GRAY SCALE RUN LENGTHS" C BY MARY GALLOWAY, UMD TR-314, JULY 1974. C C RLTX2 COMPUTES AND PRINTS THE STATISTICS ON THE PREVIOUSLY C COMPUTED RUN LENGTH, GRAY VALUE JOINT DISTRIBUTION. C NOTATION C --------- C Ng=# distinct gray levels (16 levels=g(x,y)/16) C C Nr=# distinct runs (8): C (0, 1, 2:3, 4:7, 8:15, 16:31, 32:63, 64:127, 128:255) C C Pk(i,j)=run length histogram matrix for angle k where C i=gray level, j=run length. C C Let: S(m:N) denote C N C sum C m=1 C C alpha(k)=S(i:Ng)S(j:Nr)Pk(i,j) C C Pt=# points in picture. C C C C Five measures of Pk(i,j) are computed as follows: C ============================================== C RF1k (short run emphasis) C =S(i:Ng)S(j:Nr)(Pk(i,j)/(j*j))/alpha(k); C C RF2k (long run emphasis) C =S(i:Ng)S(j:Nr)(Pk(i,j)*(j*j))/alpha(k); C C RF3k (gray level distributions of runs) C =S(i:Ng)([S(j:Nr)(Pk(i,j)]**2)/alpha(k); C (RF3 is low when runs are equally distributed throughout C the gray levels. High run length values contribute C most to this function.) C C RF4k (run length distribution) C =S(j:Nr)([S(i:Ng)(Pk(i,j)]**2)/alpha(k); C C RF5k (Run %=(total # runs/total # runs if all runs lgth 1) C = alpha(k)/Pt. C C OPDEFS 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 MQA 7501 S OPDEF MQL 7421 S OPDEF KRS 6034 S OPDEF BSW 7002 C C C C DIMENSION P0(16,8),P45(16,8),P90(16,8),P135(16,8) C C DIMENSION RF(5,4), ALPHA(4) C C C C [0] COPY THE IP ARRAYS INTO IP0, IP45, IP90, IP135 IDEV=3+IOUTSPOOL LSNEW=1 LSNUM=1+IOUTSPOOL DO 102 INDEX=1,LSNUM WRITE(LSNEW,101) 101 FORMAT(' COMPUTING RLTXTURE STATISTICS') 102 LSNEW=IDEV C DO 100 I=1,512 IZ=JP0 S INC \JP0# C CVT MAGNITUDE INT TO FP S TAD \IZ S AND (3777 S DCA \ILOW S TAD \IZ S RTL S AND (0001 S DCA \IHIGH 100 P0(I)=FLOAT(IHIGH)*2048.0+FLOAT(ILOW) C C C [0.1] IF IDB THEN DUMP Pk. C C DUMP THE INPUT MATRICES IF(IDB)103,104,103 103 WRITE(IDEV,222)'P0 ',P0 222 FORMAT(' ',A4,/,16(' ',8F5.0,/,)) WRITE(IDEV,222)'P45 ',P45 WRITE(IDEV,222)'P90 ',P90 WRITE(IDEV,222)'P135',P135 104 CONTINUE C C C [1] COMPUTE STATISTICS FOR RF1, RF2, RF3 DO 551 J=1,4 DO 551 I=1,5 ALPHA(J)=0.0 DO 551 I=1,5 551 RF(I,J)=0 C NR=8 NG=16 C C COMPUTE THE SIZE OF THE WINDOW IN PIXELS PT=FLOAT(KX2+1-KX1)*FLOAT(KY2+1-KY1) C C C [1.1] SUM OVER GRAY VALUES DO 700 IANGLE=1,4 DO 700 I=1,NG R3=0.0 C C [1.2] SUM OVER RUN LENGTHS DO 701 J=1,NR FJ=J SQJ=FJ*FJ C C GET DATA INTO FP GOTO(601,602,603,604),IANGLE C 601 P=P0(I,J) GOTO 610 C 602 P=P45(I,J) GOTO 610 C 603 P=P90(I,J) GOTO 610 C 604 P=P135(I,J) C C COMPUTE SUMS 610 ALPHA(IANGLE)=ALPHA(IANGLE)+P C C RF(1,IANGLE)=RF(1,IANGLE)+(P/SQJ) RF(2,IANGLE)=RF(2,IANGLE)+(SQJ*P) 701 R3=R3+P 700 RF(3,IANGLE)=RF(3,IANGLE)+(R3*R3) C@C ******DEBUG***** C@ WRITE(IDEV,224)'[2] ',ALPHA,RF C@224 FORMAT(//,' ',A6,' ALPHA=',4E10.3,/,' RF=',/,5(' ',4E10.3,/)) C@C **************** C C C C [2] COMPUTE RF4 STATISTICS C SUM OVER RUN LENGTHS DO 702 IANGLE=1,4 DO 702 J=1,NR FJ=J SQJ=FJ*FJ R4=0.0 C C [2.1] SUM OVER GRAY VALUES DO 703 I=1,NG C C GET DATA INTO FP GOTO(621,622,623,624),IANGLE C 621 P=P0(I,J) GOTO 703 C 622 P=P45(I,J) GOTO 703 C 623 P=P90(I,J) GOTO 703 C 624 P=P135(I,J) C C 703 R4=R4+P 702 RF(4,IANGLE)=RF(4,IANGLE)+(R4*R4) C C C@C ******DEBUG***** C@ WRITE(IDEV,224)'[3] ',S,RF C@C **************** C [3] NORMALIZE RF1:RF4 AND COMPUTE RF5 DO 705 IANGLE=1,4 DO 704 ITEST=1,4 704 RF(ITEST,IANGLE)=RF(ITEST,IANGLE)/ALPHA(IANGLE) 705 RF(5,IANGLE)=ALPHA(IANGLE)/PT C C C [4] PRINT RESULTS C@C ******DEBUG***** C@ WRITE(IDEV,224)'[4] ',S,RF C@C **************** LSNEW=1 LSNUM=1+IOUTSPOOL DO 802 INDEX=1,LSNUM C WRITE(LSNEW,803)PT,ALPHA 803 FORMAT(' TOTAL WINDOW AREA=',F11.0,/,' 0SUM=',F11.0,', 45SUM=' 1,F11.0,', 90SUM=',F11.0,', 135SUM=',F11.0,/) DO 800 ITEST=1,5 WRITE(LSNEW,801)ITEST,(RF(ITEST,J),J=1,4) 801 FORMAT(' RF',I1,': 0D=',F11.3,', 45D=',F11.3,', 90D=',F11.3, 1', 135D=',F11.3) 800 CONTINUE 802 LSNEW=IDEV C C C C 998 RETURN C C END