2014-11-14 1 views
2

저는 90 도가 아닌 특정 양만큼 회전하고 싶은 DigitalMicrograph 이미지를 가지고 있습니다. 이 작업은 "Process ... \ Rotate"메뉴 항목에서 수행 할 수 있지만 스크립트로 수행하려고합니다. 이미지에있는 선 ROI에 따라 각도를 계산하는 스크립트가 있습니다. (아래 참조). 그러나 어떻게 이미지를 회전시킬 수 있는지 알지 못합니다.이미지를 임의의 양만큼 어떻게 회전합니까?

Number kPi = 3.14159265359 

Image front := GetFrontImage() 
ImageDisplay fDisp = front.ImageGetImageDisplay(0) 
ROI line = fDisp.ImageDisplayGetRoi(0) 
if (line.RoiIsValid()) 
{ 
    if (line.RoiIsLine()) 
    { 
     number sx,sy,ex,ey 
     line.RoiGetLine(sx,sy,ex,ey) 
     number dy = ey - sy 
     number dx = ex - sx 
     number angle = atan(dy/dx) * 180/kPi 
     if (dx < 0) 
      angle = angle + 180 

     Result("\n Rotate image by " + angle + " degree.") 
    } 
} 

답변

1

지금까지 도구 및 좋은 코딩에 대한 좋은 아이디어.

찾고 계신 명령은 단순히 Rotate()입니다. '유감스럽게도'이미지 섹션에 표시되지 않았기 때문에 도움말 문서에서 빠뜨린 것 같습니다. 이 명령으로

enter image description here

스크립트는 아래와 수정할 수 : 일상 빠른 스크립트의 "간단한"스크립트 명령을 요약하는 의미 전용 "참조"섹션이 있습니다. 또한 kPiPI() 명령으로 바 꾸었습니다. Rotate() 명령은 회전 각도를 라디안 단위로 지정해야합니다. 결과 이미지의 크기가 확대되고 이미지에 제로 패딩이 적용됩니다. 또한 : If 문을 축약 된 버전으로 바꿨습니다.

Image front := GetFrontImage() 
ImageDisplay fDisp = front.ImageGetImageDisplay(0) 
ROI line = fDisp.ImageDisplayGetRoi(0) 
if (line.RoiIsValid()) 
{ 
    if (line.RoiIsLine()) 
    { 
     number sx, sy, ex, ey 
     line.RoiGetLine(sx, sy, ex, ey) 
     number dy = ey - sy 
     number dx = ex - sx 
     number angle = atan(dy/dx) + (dx < 0 ? Pi() : 0) 
     image out := front.Rotate(angle) 
     out.ShowImage() 
    } 
} 
+0

감사합니다. 매우 빠른 답변입니다. 하위 질문 : 3D 이미지와 비슷한 명령이 있습니까? –

+0

예, 아니오. Rotate() 명령은 3D 스택에서도 작동합니다. (XY 평면에서 전체 스택 회전), 일반적인 3D 회전 명령이 없습니다. (XZ 또는 YZ로 회전 시키려면 먼저 전체 스택을 뒤집은 다음 Rotate()를 적용하십시오.) – BmyGuest

+0

감사합니다. xy 회전은 내가 지금 찾고 있었던 전부였다. 그러나 호기심에서 벗어나 : 전체 스택을 90도 정도 '뒤집어서'f.e. XY 평면이 가시적 인 화면 평행 평면이됩니까? –

관련 문제