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
번호 분류 제목 글쓴이 날짜 조회 수
345 자작.개조 알루미늄 파이프 보온재 11 file 박진홍 2005.12.19 16511
344 토론방 원샷컬러 CCD의 해상도(resolution)에 대하여... 3 김상욱 2007.09.19 12304
343 토론방 EQ6 분해 2 2 file 박진홍 2005.07.26 11165
342 토론방 컬러CCD가 부러울때 6 이건호 2007.09.27 11103
341 토론방 가이드 망원경 후보.... 10 박진홍 2005.11.21 11029
340 토론방 40D vs 4000XCM 7 김상욱 2007.09.17 10985
339 토론방 슈미트카세그레인 보정판에 쌓인 먼지 4 남기현 2006.02.18 10800
338 기기정보 망원경 배율 이야기 1 황형태 2009.04.03 10691
337 토론방 모노CCD가 좋을때 4 이건호 2007.09.29 10647
336 사용기.팁 자작리듀서 관련 ( 카세그레인 계열 망원경 ) 2 file 황인준 2003.07.16 10228
335 토론방 사진촬영용 망원경의 선택? 9 이준희 2005.07.26 10198
334 자작.개조 펜탁스 16비트 냉각 DSLR 7 file 박대영 2008.06.08 10047
333 사용기.팁 슈미트경통 광축 맞추기 3 file 황인준 2003.05.15 10001
332 토론방 천체사진에 영향을 주는 요소 - 우선순위 6 남기현 2005.11.22 9921
331 토론방 냉각팬을 달아야 할까요 ? 3 박진홍 2005.11.29 9893
330 토론방 혹시... EQ6 분해해 보신분 계시나요 ? 12 file 박진홍 2005.07.26 9792
329 토론방 행성촬영 및 staking에 대해 궁굼한점... 1 박영식 2005.06.14 9785
328 자작.개조 반사경에 센터마킹하기. 1 file 최훈옥 2006.07.26 9593
327 토론방 F:4에 쓸 코마콜렉터???? 3 최승용 2005.07.04 9500
326 사용기.팁 천체 사진에 별이 흐를 때 1 (가대의 모터 특성) file 박병우 2003.04.09 9412
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에는 나눔글꼴이 설치되어 있지 않습니다.

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

설치 취소