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 기기정보 rms 1/16 람다 미러와 pv 1/6 람다 미러의 비교 2 이준화 2015.04.28 1457
84 사용기.팁 Pentax SDUF masking test 1 5 file 박영식 2007.11.13 6463
83 자작.개조 PC와 웹캠으로 오토가이드-1 3 file 이건호 2003.09.16 6656
82 자작.개조 P.S.T 펜타프리즘 개조 3 file 김종호 2014.03.05 2495
81 자작.개조 p.s.t 개조 3 file 김종호 2014.05.30 2421
80 사용기.팁 orion250 +MT160 reducer 4 file 이준화 2004.01.26 6159
79 사용기.팁 Orion 250 Spider부분 개조 - Hirohisa Matsmoto file 황인준 2003.12.11 5757
78 자작.개조 NX500 IR Cut Filter 제거 7 file 이준화 2016.01.02 1013
77 자작.개조 NJP 조견판 만들기 file 육호준 2003.12.25 5339
76 기기정보 NJP 북극성조견판 프로그램 - 김형근님의 글 2 file 김형근 2005.05.30 7616
75 사용기.팁 NJP 가대 극축 맞추기 file 박병우 2003.04.07 5215
74 사용기.팁 NJP TEMMA II 주기오차 file 이준화 2005.03.05 6367
73 자작.개조 Newtonian telescope CAD 프로그램 (newt V2.5) 1 file 이건호 2003.05.22 5512
72 사용기.팁 MPCC와 쌍곡면 미러의 조합 file 장승혁 2010.07.05 5128
71 사용기.팁 MPCC 자료 6 file 장승혁 2010.06.24 4629
70 기기정보 MPCC coma corrector 18 이준화 2005.02.18 6031
69 사용기.팁 Morning Calm 300GE First Light 1 file 황인준 2011.03.23 5011
68 사용기.팁 MaxIm에서 망원경제어 5 file 이건호 2005.12.20 6615
67 토론방 Maxim vs IRAF 1 박영식 2005.06.08 9378
» 기기정보 MATLAB 을 사용한 영상 더하기 프로그램 이준화 2003.04.06 5564
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에는 나눔글꼴이 설치되어 있지 않습니다.

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

설치 취소