Skip to content

(*.249.97.68) 조회 수 5616 댓글 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
번호 분류 제목 글쓴이 날짜 조회 수
» 기기정보 MATLAB 을 사용한 영상 더하기 프로그램 이준화 2003.04.06 5616
344 기기정보 행성 사진의 국제기구 보고 관련하여..( Mr. Ikemura : ALPO-JAPAN) -1 황인준 2003.04.06 5248
343 자작.개조 10인치 뉴튼식 반사 제작기 4 황형태 2003.04.07 6500
342 사용기.팁 반사 와 굴절의 성상 차이 이준화 2003.04.07 5670
341 사용기.팁 NJP 가대 극축 맞추기 file 박병우 2003.04.07 5279
340 사용기.팁 [re] 반사 와 굴절의 성상 차이 이건호 2003.04.08 5099
339 자작.개조 쿨픽스4500 셔터릴리즈 사용 1 file 이건호 2003.04.08 5462
338 사용기.팁 [re] 반사 와 굴절의 성상 차이 이준화 2003.04.08 4565
337 사용기.팁 천체 사진에 별이 흐를 때 1 (가대의 모터 특성) file 박병우 2003.04.09 9479
336 사용기.팁 천체 사진에 별이 흐를 때 2 (적도의의 기구적 특성) file 박병우 2003.04.09 5499
335 사용기.팁 천체사진에 별이 흐를 때 3 (NJP 측정 결과) 박병우 2003.04.09 5084
334 기기정보 디지탈 카메라별 노이즈 패턴 비교 7 황인준 2003.04.10 4242
333 기기정보 [re] CP995 2 file 최승용 2003.04.10 3839
332 자작.개조 [최승용] CP995 리모콘 개조 4 file 최승용 2003.04.10 4952
331 기기정보 [re] icx205al file 이준화 2003.04.10 3792
330 기기정보 [re] 디지탈 카메라별 노이즈 패턴 비교 1 file 박병우 2003.04.10 4023
329 기기정보 [re] ST-10XME 1 file 이건호 2003.04.10 3664
328 기기정보 [re] cp4500 - 5분 2 file 이건호 2003.04.10 3646
327 기기정보 [re] cp4500 - 1분 9 file 이건호 2003.04.10 3644
326 사용기.팁 천체사진에 별이 흐를 때 4 (추정 원인과 대책) 12 file 박병우 2003.04.10 5752
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 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에는 나눔글꼴이 설치되어 있지 않습니다.

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

설치 취소