VTKファイルをつくる2

 投稿者:しばっち  投稿日:2018年 3月10日(土)20時50分57秒
  このプログラムでは画像データから濃度値を高さとしてvtkファイルに書き込んでいます。

なお、グレイスケール8bitカラーのjpgファイルをParaViewで読み込み、Filtersメニューの
Alphabeticalから「Warp By Scalar」を選択すれば濃度値を高さに変換できます。
(※フルカラーだとベクトル値扱いで「Warp By Vector」になります)

image magickなら、
convert(magick) fullcolor.jpg -colorspace gray grayscale.jpg
でグレイスケールに変換できます。

LET XSIZE=945
LET YSIZE=125
CALL GINIT(XSIZE,YSIZE)
SET TEXT HEIGHT 100
SET TEXT COLOR 255
SET TEXT JUSTIFY "LEFT" , "TOP"
PLOT TEXT,AT 0,YSIZE:"(仮称)十進BASIC"
FILE GETSAVENAME F$,"vtkファイル|*.vtk"
IF F$="" THEN STOP
IF POS(UCASE$(F$),".VTK")=0 THEN LET F$=F$&".vtk"
OPEN #1:NAME F$
ERASE #1
PRINT #1:"# vtk DataFile Version 3.0"
PRINT #1:"letter"
PRINT #1:"ASCII"
PRINT #1:"DATASET STRUCTURED_GRID"
PRINT #1:"DIMENSIONS";XSIZE;YSIZE;1
PRINT #1:"POINTS";XSIZE*YSIZE;"float"
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
      LET C=GETPOINT(X,Y) !'濃度値を高さへ
      IF C<0 THEN LET C=0
      PRINT #1:X;Y;C
   NEXT   X
NEXT   Y
PRINT #1:"POINT_DATA";XSIZE*YSIZE
PRINT #1:"SCALARS height double"
PRINT #1:"LOOKUP_TABLE default"
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
      LET C=GETPOINT(X,Y)
      IF C<0 THEN LET C=0
      PRINT #1:C
   NEXT  X
NEXT  Y
CLOSE #1
END

EXTERNAL FUNCTION GETPOINT(X,Y)
ASK PIXEL VALUE(X,Y) C
LET GETPOINT=C
END FUNCTION

EXTERNAL SUB PSET(X,Y,C)
SET POINT COLOR C
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW  0 , XSIZE-1 , 0,YSIZE-1
SET COLOR MODE "REGULAR"
SET POINT STYLE 1
FOR I=0 TO 255
   SET COLOR MIX(I) I/255,I/255,I/255
NEXT I
CLEAR
END SUB
 
 

戻る