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
c 03/10/17版
c 適当な3色だけで描かれた画像の中の、それぞれの色の部分の面積比
c などを求める。
c 例えば木橋の写真で、木部材の橋全体に占める割合や
c 木橋の全景に占める割合を求める場合は、まず、
c 橋の部分を切り出して背景白の画像に貼り付け、
c 木部材の部分を赤一色で塗りつぶし、その他の部材を黒一色で
c 塗りつぶした画像を ppm のアスキー形式で保存したものを
c senyuu < hoge.ppm
c のように入力する。
c ----------------------------------------
c 但し、プログラムのデータ入力部分は、
c ppmファイルの各行のデータの個数がどういうふうになっているかに
c 応じて、書き換えなければならない。
c 以下は、横のピクセル数が6の倍数になっている画像(600*400とか)を
c Paint Shop Pro 8 ( http://paintshoppro.jp/ )
c で、ppm 形式に保存したファイルからの読み込みに対応させた例
c
program senyuu
implicit real*8 (a-h, o-z)
dimension rgb3(2880000)
character p3*2
read(*,100) p3
100 format(a2)
write(*,*) ' マジックナンバー:',p3
read(*,*) m,n
write(*,*) ' 幅:',m
write(*,*) ' 高さ:',n
mn=m*n
read(*,*) max
write(*,*) ' 最大値:',max
mn6=mn/6-1
do i=0,mn6
read(*,*) (rgb3(18*i+j),j=1,18)
end do
c
moku=0
nhoka=0
nzenbu=0
c
do i=1,mn
nr=rgb3(3*i-2)
ng=rgb3(3*i-1)
nb=rgb3(3*i)
c 木部材のRGB階調値を指定
if((nr.eq.150).and.(ng.eq.0).and.(nb.eq.0)) then
moku=moku+1
end if
c その他部材のRGB階調値を指定
if((nr.eq.0).and.(ng.eq.0).and.(nb.eq.0)) then
nhoka=nhoka+1
end if
end do
c
write(*,*) ' 全ピクセル数:',mn
write(*,*) ' 木部材ピクセル数:',moku
write(*,*) ' その他部材ピクセル数:',nhoka
nhasi=moku+nhoka
write(*,200) ' 木部材/橋全体:',real(moku)/real(nhasi)
write(*,200) ' 橋/全景:',real(nhasi)/real(mn)
200 format(a, f5.3)
end
c