- program mangepoint
- implicit none
- integer source(6000,8000), resul(6000,8000)
- integer ic, il, sigma, iblancg, iblancd, lgr, nbvois, sigmatot
- integer nblig, nbcol, posit, icc, ill, distance2, sigma2
- character*90 ligne
- character*1 bout
- character*2 sigmachar
- character*30 nomfichier, nominput, nomoutput
- sigma = 0
- call getarg(1, nomfichier)
- call getarg(2, sigmachar)
- read (sigmachar, *) sigma
- if (sigma.eq.0) then
- print *, 'Sigma = 0 !'
- stop
- endif
- posit = len_trim(nomfichier) + 1
- nominput = nomfichier(1:posit-1)//'.pbm'
- call system('copy '//nominput//' old'//nominput)
- nomoutput= nominput
- sigmatot = (2*sigma + 1)*(2*sigma + 1) !
- sigma2 = sigma*(sigma + 1)
- print *, 'sigmatot = ', sigmatot
- call system('convert -compress none '//nominput//nominput)
- open (unit=8, file=nominput)
- open (unit=9, file=nomoutput)
- read (8, '(a)') ligne ! P1
- write (9, '(a)') ligne
- read (8, '(a)') ligne
- do while (index(ligne, '#').gt.0)
- read (8, '(a)') ligne
- enddo
- write (9, '(a)') ligne
- read (ligne, *) nbcol, nblig
- print *, nblig, nbcol
- ic = 1; il =1
- do while ((il.lt.nblig).and.(ic.lt.nbcol))
- read (8, '(a)', end=200) ligne
- lgr = len_trim(ligne)
- iblancg = 1
- iblancd = 0
- do while (iblancd.lt.lgr)
- iblancd = index(ligne, ' ')
- bout = ligne(iblancg:iblancd - 1)
- read (bout,*) source(ic,il)
- ic = ic + 1
- ic = mod(ic, nbcol)
- if (ic.eq.0) il = il + 1
- ligne(iblancd:iblancd) = '*'
- iblancg = iblancd + 1
- enddo
- enddo
- print *, 'Lecture OK'
- goto 300
200 print *, 'Fin de fichier', ic, il 300 do ic = sigma, nbcol - sigma
- do il = sigma, nblig - sigma
- nbvois = 0
- resul(ic, il) = source(ic, il)
- do icc = ic - sigma, ic + sigma
- do ill = il - sigma, il + sigma
- distance2 = (icc - ic)*(icc - ic) + (ill - il)*(ill - il)
- if ((distance2.le.sigma2).and.(source(icc,
- + ill).eq.1)) nbvois = nbvois + 1
- enddo
- enddo
- if (nbvois.lt..125*sigmatot) resul(ic, il) = 0
- enddo
- enddo
- print *, 'Fin du traitement'
- do il = 1, nblig
- ic = 1
- do while (ic.le.nbcol)
- write (9,*) (resul(icc, il), icc=ic, min(ic+19, nbcol))
- ic = ic + 20
- enddo
- enddo
- close (unit=8)
- close (unit=9)
- end