작성일:
 
2010. 11. 12. 15:20
 


;이미지 벡터 연산

pro img

file=filepath('people.dat', subdir=['examples','data'])
people=read_binary(file, data_dims=[192,192,2])
window, xs=800, ys=400
tvscl, people[*,*,0], 0
tvscl, people[*,*,1], 1
fusion=total(people, 3)/2
tvscl, fusion, 2

print, max(fusion)
tvscl, fusion, 3

fusion2=(people[*,*,0]+people[*,*,1])/2
tvscl, fusion2, 4

sum_img=people[*,*,0]+people[*,*,1]
tv, sum_img, 5
tvscl, sum_img, 6

end



위 이미즈의 경우
바이트, 정수값을 지정해주지 않으면
정확한 결과가 나오지 않을 수 있다.

ex) 254 + 2 =   255(byte)기준으로  255를 초과하여 1의 이상한 숫자가 된다.


함수와 프로시져

공통점: pro
차이점: 프로시저 (pro 생략), 인수1, 인수2, 키워드
    * 서브루틴
    * 출력값 = 함수 (입력1, 입력2, 키워드)

쉽게 생각하면, 프로시져는 이미 짜져있는 결과를 보는것이고
함수는 어떤 값을 넣었을때, 다른 값을 출력해주는 녀석이라 보면 된다.


print, 5.5, format='(F7.5)    ; Procedure / Result 5.50000 (소숫점 이하 5자리)
sin(!pi)     ; Function

;프로시져는 콤마로 구분하며
;함수, 프로시져는 대소문자 구별이 없다.
; /키워드는  키워드=1과  문법적으로 동일하다.
; device, decomposed=1  &  device/decomposed


* 나의 프로시져 만들기와 등록하기

; 프로시져 및 함수 뿐만이 아니라 필요한 함수와 프로시져를 직접 제작, 사용 할 수 있다.
;기본적인 규칙 (프로그램과 해더명만 제대로 정의 한다면) 누구나 사용이 가능하다.

IDL 프로시져 -> http://wiinemo.tistory.com/70 글 참조

;프로시져
pro 변수명
end

;함수
funtction 변수, 변수1, 변수2
   작업
   return, 변수3
end

; 함수로 제작한 평균값, 최대값, 최소값 출력 프로그램

function res, x, y, z

  a=[x,y,z]
  resrt=[mean(a), max(a), min(a)]
  return, resrt
 
end

; 프로시져로 제작한 평균값, 최대값, 최소값 출력프로그램



; 블록문;

마찬가지로 http://wiinemo.tistory.com/70 참조



아스키 파일 처리

; 아스키 파일 읽기 (read_col 의 함수)
; 줄단위의 파일 읽기, 한줄에 해당하는 변수는 포맷문으로 구별
; 포맷문으로 구별된 변수 혹은 배열을 미리 선언해주어야 한다.

포맷문
; 아스키에서도 변수를 구분하는 포멧이 중요하다.
; 자료 분석을 위해 자료의 입출력을 할 경우 포맷문의 사용의 필요성이 크다.

포멧문
format='(I3)'  ;3자리 정수
format='(6I2,4(i5,x)'   ;두자리의 정수가 6개 (연속) / 5자리 정수 (한칸 빈칸)

6I2는
if 123456789012 이라면
12 , 34 , 56 , 78 , 90, 12 으로 읽는다.

4(i5,x)는
09324 34343 95324 (띄어쓰기 포함) 라고 한다면
이런 숫자의 값을 5번 읽는 것이다.  (x가 공란 의미)



format='(6F8.2, 4(F10.3, x))'  ;  8.2자리의 실수가 6개 /

/ 읽고 쓰는 지점 다음줄 넘김
I - 정수
F - 실수
D - Double precision
A - 문자 (String)
nx - 여백

ex)
fmt='(2x,i4,2f8.3,4f7.3,1x,4f6.3,x,4i2)'


필요한 데이터는 그저 4개의 데이터...