Skip to content

(*.249.97.68) 조회 수 5564 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
2년전에 처음으로 웹캠 사진을 찍은후 영상처리가 문제였습니다. 적절한 프로그램을 사기에는 돈이 아깝고 해서 그당시부터 MATLAB 프로그램을 자주 이용해왔습니다. 영상을 더한다던가하는 간단한 영상처리는MATLAB 에서 하면 편리합니다. 요즘에는 MAXIM 등의 프로그램이 있어서 프로그램을 짤필요는 없지만, 자기만의 특별한 영상처리를 하려면 MATLAB 을 활용하는 것이 가장 시간이 적게 걸리는 방법이겠죠. 저의경우 photoshop 에서는 16-비트 더하기가 안되서 더하기 과정만 MATLAB을 이용했습니다. 버그가 좀 있을지도 모르지만 아직까지는 잘 쓰고 있습니다. 행성사진의 합성에는 사용할 수 없지만, 별사진의 경우에는 사용할 수 있습니다.


프로그램 설명입니다.

입력화일의 형식은 *.tif 의 16 비트 흑백영상 TIF 화일입니다. (칼라는 안됩니다. 각채널별로 사용하시면 되겠습니다.)
더하려는 화일의 이름은 ORION_1,ORION_2 ...,ORION_8 처럼 뒤에 _N 형식으로 일련번호가 붙어 있어야 됩니다.
입력할때는 ORION 이라고 입력하시면 되고, 시작번호 부터 끝번호까지 더합니다.(중간에 빠진 번호가 있으면 안됩니다.)

시작번호에 대응하는 영상이 기준영상이 되고, offset 값은 이영상으로 부터 다른영상이 + 또는 - 로 최대 얼마나 벗어나 있는가를 나타냅니다(pixel 단위입니다.). 이값이 커지면 프로그램 실행시간이 길어집니다.(프로그램을 무식하게 짰기때문이죠^^)

reference point 의 수는 사진을 정렬할 때 사용되는 별의 갯수 입니다. 보통 3으로 하시면 됩니다.

Background 는 dark frame 에 해당하는 file 이름을 넣어줍니다. 그러면 매 영상마다 이영상을 빼고 align 한후 더하게 됩니다.

프로그램은 다음과 같습니다. MATLAB에서도 영상처리를 할 수 있다는 예제 프로그램이라는 의미로 올려봅니다.
점선아래만 복사해서 *.m file로 저장후 사용하시면 되겠습니다.

< copy free 며 자유롭게 사용하세요. 대신 이 프로그램으로 인한 어떠한 문제도 책임질 수 없습니다.>
-------------------------------------------------------------------

filename=input('Input the file name=','s');
StartImage=input('Number of Start image=');
EndImage=input('Number of End image=');
NoOfRefPt=input('Number of Reference Points=');
NoOfImage=EndImage-StartImage+1;
MaxOffset_x=input('Max Row Offset =');
MaxOffset_y=input('Max Column Offset =');

Backfilename=input('Back Ground file name=','s');
filename1=strcat(filename,'_');
filename2=strcat(filename1,num2str(StartImage));

ref_image=double(imread(strcat(filename2,'.tif'),'tiff'));
back_image=double(imread(strcat(Backfilename,'.tif'),'tiff'));

minval=min(min(back_image));
back_image=back_image-minval;

ref_image=ref_image-back_image;

[X_size,Y_size]=size(ref_image);

ImageSum=ref_image;

ImageSum(1:MaxOffset_x+50,:,:)=0;
ImageSum(X_size-MaxOffset_x-50:X_size,:)=0;
ImageSum(:,1:MaxOffset_y+50,:)=0;
ImageSum(:,Y_size-MaxOffset_y-50:Y_size,:)=0;

%NoOfRefPt=5;%Number of reference points
X=zeros(31,NoOfRefPt);
Y=zeros(31,NoOfRefPt);
A_image=zeros(31,31,NoOfRefPt);
for np=1:NoOfRefPt;% Find reference points

[W,I]=max(ImageSum);
[Z,J]=max(W);

Ax=I(J);
Ay=J;

[Ax Ay]

X(:,np)=[Ax-15:Ax+15]';
Y(:,np)=[Ay-15:Ay+15]';

ImageSum(Ax-30:Ax+30,Ay-30:Ay+30,:)=0;

A_image(:,:,np)=ref_image(X(:,np),Y(:,np),1);

end

filename1=strcat(filename,'_');
StartX=1;EndX=X_size;
StartY=1;EndY=Y_size;


ImageSum=ref_image;
ImageCount=1;
for n=StartImage+1:EndImage;
filename2=strcat(filename1,num2str(n))
read_image=double(imread(strcat(filename2,'.tif'),'tiff'))-back_image;
%read_image=read_image-min(min(min(read_image)));
% Search -MaxOffset,~+MaxOffset

ErrorIndex=zeros(MaxOffset_x*2+1,MaxOffset_y*2+1);

for nx=1:MaxOffset_x*2+1;
offset_x=nx-MaxOffset_x-1;
for ny=1:MaxOffset_y*2+1;
offset_y=ny-MaxOffset_y-1;

ErrorIndex(nx,ny)=0;

for np=1:NoOfRefPt;

Ax_image=read_image(X(:,np)+offset_x,Y(:,np)+offset_y)-A_image(:,:,np);
ErrorIndex(nx,ny)=ErrorIndex(nx,ny)+sum(sum(Ax_image.*Ax_image));

end

end
end

[W,I]=min(ErrorIndex);%nx
[Z,J]=min(W);%ny

offset_x=I(J)-MaxOffset_x-1
offset_y=J-MaxOffset_y-1

start_x=max(1-offset_x,1);
end_x=min(X_size-offset_x,X_size);
start_y=max(1-offset_y,1);
end_y=min(Y_size-offset_y,Y_size);

XX=start_x:end_x;
YY=start_y:end_y;
ImageTmp=ImageSum/ImageCount;
ImageTmp(XX,YY)=read_image(XX+offset_x,YY+offset_y);
ImageSum=ImageSum+ImageTmp;
ImageCount=ImageCount+1;

StartX=max(StartX,start_x);
EndX=min(EndX,end_x);
StartY=max(StartY,start_y);
EndY=min(EndY,end_y);

end

X=StartX:EndX;
Y=StartY:EndY;

ImageSum(:,:,2)=ImageSum(:,:,1);
ImageSum(:,:,3)=ImageSum(:,:,1);
MinValue=min(min(min(ImageSum(X,Y))));
ImageSum=ImageSum-MinValue;
ImageSum=ImageSum.*(ImageSum>=0);
MaxValue=max(max(max(ImageSum(X,Y))));
ImageSum=ImageSum/MaxValue;

filename1=strcat(filename,'(');
filename1=strcat(filename1,num2str(StartImage));
filename1=strcat(filename1,'...');
filename1=strcat(filename1,num2str(EndImage));
filename1=strcat(filename1,')');
imwrite(uint16(ImageSum*65535),strcat(filename1,'SUM.tif'),'tiff');

천문장비 개조.자작.뉴스.사용기.팁

천문장비 정보들의 모임(카메라제외)

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
85 자작.개조 알루미늄 파이프 보온재 11 file 박진홍 2005.12.19 16512
84 기기정보 압력 조절 에탈론 1 file 김종호 2015.03.03 1037
83 기기정보 여러가지 이견이 생기는 배경에 관하여(원문이 사라져버렸습니다.) 이준화 2003.05.01 3467
82 사용기.팁 오리온 250 5 file 이준화 2004.01.05 5870
81 사용기.팁 오리온 주경 광축 조절나사 보강하기. 6 file 황인준 2003.12.03 6276
80 자작.개조 오리온250경통 인조가죽 붙이기 3 file 이준화 2004.02.05 6998
79 사용기.팁 오토가이더 핀 2 file 이건호 2003.06.02 4950
78 기기정보 오토가이드 팁 - 정세윤님의 글 정세윤 2005.05.06 8392
77 자작.개조 완성한 다카하시용 북극성 조견판(366일용) 4 file 최승용 2004.06.15 8044
76 자작.개조 요녀석 어때요??? 1 file 박영식 2005.01.21 7278
75 토론방 원샷컬러 CCD의 해상도(resolution)에 대하여... 3 김상욱 2007.09.19 12304
74 사용기.팁 윌리엄 옵틱스 천정 미러 file 박성래 2007.10.04 6469
73 기기정보 이 그래프에 대해 3 박병우 2003.05.01 3650
72 자작.개조 이단 스피드 접안부 5 file 최승용 2003.10.22 6183
71 사용기.팁 이미지 합성 1 이준화 2003.11.12 5330
70 자작.개조 이번에 옆동네에서 진행한 전동포커서 제작 5 file 김태환 2015.06.19 1359
69 자작.개조 이준화교수님 보세요. 4 file 정민경 2004.02.06 6151
68 기기정보 이준화님의 아래 글에 대한 답변과 마지막 설명 file 박병우 2003.04.30 3615
67 기기정보 이혁기님의 글 보조설명/ 건호님과 의견 수렴 내용, 향후 과제 73 file 박병우 2003.05.07 4139
66 자작.개조 인테리어 후드(?) 3 file 남명도 2003.07.22 5872
Board Pagination Prev 1 ... 9 10 11 12 13 14 15 16 17 18 Next
/ 18

NADA. Network of Amatuer Digital Astrography © Since 2003, All Rights Reserved

Design ver 2.0 / Google Chrome 에 최적화 되어 있습니다.

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소