2014-05-25 4 views
0

나는 실험 한 이미지 (100)가 들어있는 폴더가 있습니다. 또한 탐지기의 배경 이미지 (100도 포함)가있는 다른 폴더가 있습니다. 나는이 같은 수행하는 코드를 작성했습니다Matlab 이미지 프로세싱

:

% Define images directory 
% Define detector bg directory 


% Loop over each frame and do some processing 

for a=1:length(image directory) 

%read files from directory 

bg_corrected_image = frame#-bg_image# % # begins with 1 


n=size(image directory) 
new_images=zeros(n) 

% Now sort through each pixel in bg_corrected image and assign value according to a criterion 

for ii=1:size(bg_corrected_image,1) 
    jj=1:size(bg_corrected_image,2) 

     pixel=bg_corrected_image(ii,jj); 

     if pixel>500 
      pix_mod=0; 

     elseif pixel<30 
      pix_mod=0; 
     else 
      pix_mod=pixel; 
     end 

     new_image(ii,jj)=pix_mod; 
    end 

******************* CODE TO SAVE IMAGE AND NOT OVERWRITE AFTER EACH 
ITERATION OF LOOP? 

end 

내가 지금하고 싶은 것은이식이 요법을 정렬 화소를 통과 한 후 각각의 이미지 (프레임)을 저장하는 것입니다 그래서 난 그냥 수 루프가 끝난 후에 모두 합계하십시오. 나는 그것을하기위한 최선의 방법이 무엇인지 너무 확신하지 못한다. 내가해야 할 일은 각 반복 후에 "new_image"를 저장하는 셀 배열을 만드는 것인데, 그 코드는 내가 asterik을 배치해야하는 곳으로 가야한다고 생각한다. 이전에 코드에 이미지를 저장하고 싶지는 않습니다. 어떤 도움을 많이 주셨습니다.

+0

당신은 루프 대신 matlab에서 벡터화를 사용해보십시오. 당신은 한 줄에 루프를 대체 할 이미지 처리 매트릭스에서 기능을 사용할 수 있습니다 (나는 matlab에 몇 년 동안 작성하지 않은, 그래서 특정하지 사과드립니다) – chook

+0

예, 내가 생각한 후에 모든 것을 vectorise 것입니다 for 루프에서 처음으로 코드를 작업하는 방법. 감사. – user3673737

+1

'new_images = zeros (n, n, numel (이미지 디렉토리))'와 나중에'new_image (ii, jj, a) = pix_mod;'에 3D 행렬로 저장하십시오. 그것이 당신을 위해 작동하는지 알려주세요! – Divakar

답변

0

다음과 같이 3D 이미지 "imagestack"에 모든 이미지를로드 한 다음 모두 처리 한 다음 출력 할 수 있습니다. 여기서 픽셀 대체의 벡터화는 픽셀에 대한 for 루프 반복보다 훨씬 빠릅니다.

IMAGECOUNT=100; 
FILEPATH_IN='images/input/%d.jpg'; 
FILEPATH_OUT='images/output/%d.jpg'; 

I=imread(sprintf(FILEPATH,1)); 
[hei wid]=size(I); 

imagestack=zeros(hei,wid,100); 

for n=1:IMAGECOUNT 
    imagestack(:,:,n)=imread(sprintf(FILEPATH_IN,n)); 
end 

imagestack(imagestack>500)=0; 
imagestack(imagestack<30)=0; 

for n=1:IMAGECOUNT 
    imwrite(imagestack(:,:,n),sprintf(FILEPATH_OUT,n)); 
end 
관련 문제