Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
! 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
!