2014-11-13 3 views
0

이 스크립트는 2000 개의 이미지 집합에 마스크를 곱한 다음 각 프레임의 값을 합하여 이미지 처리에 사용됩니다. 이 값은 Intensity라는 행 벡터에 입력됩니다.MATLAB에서 루프 내에서 변수 이름을 동적으로 변경

intensity1, intesity2 ... intensity20이라는 20 개의 행 벡터로 끝내려고합니다. 모든 루프 반복시 Intensity 행 벡터의 이름을 바꾸는 간단한 방법이 있습니까?

for m=1:20 

mask=bigrating(m,m,0); 

     for n=1:2000 
      I=sum(sum(imread((sprintf('image%05d.tif',n))).*(mask))); 
      Intensity(n)=I; 
     end 

save('filepath','Intensity') 

end 
+1

을 나는, 당신은 강도 벡터의 각을 쓰고 약간 혼란 싶어하고 intensity1, intensity2, .... intensity20와 같은 다른 파일 이름으로? "강도 행 벡터의 이름 변경"을 통해 의미를 명확히 할 수 있습니까? 아니면 intensity1, intensity2 등을 동적으로 생성하고 싶습니까? for 루프에서 Intensity (n)을 수행하는 대신? – ha9u63ar

+0

intensity1, intensity2 등으로 강도 벡터를 저장하고 싶습니다. 파일 이름이 매번 1 씩 증가하며 매번 증가 할 파일 내에 저장된 변수의 이름을 원합니다. – Greg

+0

명령 뒤에 대답을 업데이트했습니다. @Mark – ha9u63ar

답변

0

동적 intensity1, intensity2라는 싶어서 .... intensity20 등, 당신을 위해 다음과 같은 작업을해야합니다 :

for m = 1:20 
    mask = bigrating(m,m,0) 
    for n = 1:2000 
     I=sum(sum(imread((sprintf('image%05d.tif',n))).*(mask))); 
     eval(['intensity' num2str(m) ' = I']) 
    end 
    save('filepath', ['intensity' num2str(m)]) 
end 
+0

'eval'의 사용은 일반적으로 권장되지 않으며 다른 해결책이 없다면 피해야합니다. 여기에 @Peter로 제시된 2D 배열은 문제가 훨씬 더 나은 해결책입니다. – am304

+0

@ am304 동의하지만, 그가해야 할 빠른 시뮬레이션/계산 인 경우, 그는 그걸로 도망 갈 수 있습니다. – ha9u63ar

+0

저는 사람들, 특히 신규 사용자, 나쁜 일 등을 가르치기 위해 약간주의를 기울였습니다. 한 번 해보았을 때 제대로 지키지 않고 계속하기 때문입니다. 마스터 요다가 한 번 말했듯이 : "일단 어둠의 길을 시작하면 오비완의 견습생처럼 영원히 당신의 운명을 지배하고, 당신을 소비 할 것입니다." – am304