! mozi-koodo: EUC ! 白い背景に橋の部分の写真を切り取って貼り付けた画像の ! 橋の部分のRGB等を求める。 ! 05/11/15版 ! アスキーフォーマットのppm画像ファイルの R値、G値、B値それぞれの ! 平均と標準偏差を求める。 ! 以下は、GIMPでアスキー形式のppmフォーマットで保存したファイル ! (RGBデータが1行に1個ずつ書き込まれている)からの読み込みに対応させた例 ! program ppmhasig implicit real*8 (a-h, o-z) dimension rgb3(3900000),r(3900000),g(3900000),b(3900000), & rh(1000000),gh(1000000),bh(1000000), & zy(1000000),zi(1000000),zq(1000000) character p3*2,mozi*44 read(*,100) p3 100 format(a2) write(*,*) 'マジックナンバー:',p3 read(*,*) mozi read(*,*) m,n write(*,*) '幅:',m write(*,*) '高さ:',n mn=m*n read(*,*) max write(*,*) '最大値:',max do i=1,mn read(*,*) rgb3((i-1)*3+1) read(*,*) rgb3((i-1)*3+2) read(*,*) rgb3((i-1)*3+3) end do ! ! 以上がデータ入力 ! do i=1,mn r(i)=rgb3((i-1)*3+1) g(i)=rgb3((i-1)*3+2) b(i)=rgb3((i-1)*3+3) end do ! nh=0 do i=1,mn if((r(i).eq.255).and.(g(i).eq.255).and.(b(i).eq.255)) goto 1000 nh=nh+1 rh(nh)=r(i) gh(nh)=g(i) bh(nh)=b(i) 1000 continue end do ! ! call heikin(nh,rh,ar,sr) call heikin(nh,gh,ag,sg) call heikin(nh,bh,ab,sb) write(*,*) ' 橋のピクセル数:',nh write(*,*) 'R値の平均=',ar,'(標準偏差:',sr,')' write(*,*) 'G値の平均=',ag,'(標準偏差:',sg,')' write(*,*) 'B値の平均=',ab,'(標準偏差:',sb,')' x=float(max) write(*,*) '------------------------------------------' write(*,*) '最大値1に正規化' write(*,*) 'R値の平均=',ar/x,'(標準偏差:',sr/x,')' write(*,*) 'G値の平均=',ag/x,'(標準偏差:',sg/x,')' write(*,*) 'B値の平均=',ab/x,'(標準偏差:',sb/x,')' write(*,*) '------------------------------------------' ! ! RGB の平均を YIQ に変換 do i=1,nh zy(i)=0.31d0 * rh(i) + 0.59d0 * gh(i) + 0.11d0 * bh(i) zi(i)=0.60d0 * rh(i) - 0.28d0 * gh(i) - 0.32d0 * bh(i) zq(i)=0.21d0 * rh(i) - 0.52d0 * gh(i) + 0.31d0 * bh(i) end do call heikin(nh,zy,ay,sy) call heikin(nh,zi,ai,si) call heikin(nh,zq,aq,sq) write(*,*) 'Y値の平均=',ay,'(標準偏差:',sy,')' write(*,*) 'I値の平均=',ai,'(標準偏差:',si,')' write(*,*) 'Q値の平均=',aq,'(標準偏差:',sq,')' write(*,*) '------------------------------------------' write(*,*) '最大値1に正規化' write(*,*) 'Y値の平均=',ay/x,'(標準偏差:',sy/x,')' write(*,*) 'I値の平均=',ai/x,'(標準偏差:',si/x,')' write(*,*) 'Q値の平均=',aq/x,'(標準偏差:',sq/x,')' ! ! 200 format(1pd13.5) 210 format(i4,1pd13.5) ! end ! subroutine heikin(mn,x,a,s) implicit real*8 (a-h, o-z) dimension x(mn) a=0.d0 s=0.d0 do i=1,mn a=a+x(i) end do a=a/float(mn) do i=1,mn s=s+ ( x(i)-a )**2 end do s=sqrt(s/mn) return end !