2013-08-05 4 views
1

Images라는 폴더 내에 BasePics라는 폴더가 있습니다. BasePics 안에 30 개의 JPEG 이미지가 있습니다. 다음과 같은 것이 가능한지 궁금합니다 : imread() 명령을 사용하여이 모든 이미지를 읽는 스크립트를 작성할 수 있습니까? 이미지의 이름은 다소 순차적 : 모든 방법 MATLAB 폴더에서 여러 이미지 읽기

C10C_Base.jpg

까지 등 C1A_Base.jpg, C1B_Base.jpg, C1C_Base.jpg, C2A_Base.jpg, C2B_Base.jpg, C2C_Base.jpg, ... 루프는 어떻게 든 사용할 수 있습니다 :

file = dir('Images\BasePics'); 
    NF = length(file); 
    for k = 1:NF 
     images(k) = imread(fullfile('ImagesBasePics',file(k)) 
     imagesc(images(k)) 
    end 

이 내가하고 싶은 무엇을 거친 아이디어이지만, 그것은 내가 이미지 폴더에있는 현재 명명 형식으로 수행 할 수 있는지 궁금하네요. 나는 각 이미지가 하나의 변수 images 아래의 30 개의 이미지가 모두 연결된 배열이 아닌, Images \ BasePics 폴더에 이름이 지정된 것과 동일하거나 유사한 이름을 가진 자체 변수가되도록하고 싶습니다. 두 개의 추가 파일이 있습니다 (30) 대신에,

dir images\BasePics 

매트랩 (33 개) 파일을 출력 : 난 그냥 부탁 할 때 나는 ... 같은 A1, A2,A3,B1,B2,B3 등과 같은 이름을 가진, 30 개 별도의 변수를 가지고 또한

싶습니다 폴더의 시작 부분에 '.' '..'그리고 마지막에 하나 : 'Thumbs.db'폴더를 별도로 볼 때 이러한 것들이 존재하지 않습니다. MATLAB이 이들을 건너 뛰도록 프로그래밍 방식으로 할 수있는 방법이 있습니까?

감사합니다. 당신이 사전에 파일의 이름을 알고 있기 때문에

답변

2

, 당신은 dir를 건너 뛰고 계속 진행하여 파일을 읽을 수 있습니다 : 이제 당신이 구조체를

for l = 'ABC' 
    for n=1:10 
     nm = sprintf('C%d%c_Base.jpg', n, l); 
     fnm = sprintf('%c%d', l, n); 
     imgs.(fnm) = imread(fullfile('images','BasePics', nm)); 
    end 
end 

을 필드 A1imgs ... C10 각 이미지에 대해

+0

큰 감사 images.C1A 같은 구조체의 배열을 사용하는 것, 그게 내가 – user2654568

+0

어쩌면 당신 또는 원하는 정확히입니다 @ 피터는 저를 더 멀리 도울 수 있었다 : 나는 실제로 30의 그림을 가진 심상 폴더 내의 몇몇 폴더가, 각각있다. 이상적으로는 입력이 하위 폴더, 즉''BasePics ''이고 출력이'imgs.BasePics' 또는'imgs. (입력이 무엇이든간에)'함수를 작성하고 싶습니다. – user2654568

+0

@ user2654568 하위 폴더 이름을 포함하는 변수로 "BasicPics"문자열을 바꿀 수 있습니다. 기본적으로 함수를 만드는 데 필요한 모든 것입니다. 직접 해보십시오! – Shai

1

아주 가까이 있습니다. 외래 파일을 제거하려면 dir('Images\BasePics\*.jpg')을 사용합니다.

원하는 명명 체계가 추가 배치 처리에 적합하지 않습니다 (실제로 모든 A1, A2 등을 입력 하시겠습니까?). 나도 순차적를 유지하고, 일치하는 파일 이름의 목록을 저장하거나 등

dirlist = dir('Images\BasePics\*.jpg'); 

for k = 1:length(dirlist); 
    fname = dirlist(k).name; 
    [path,name,ext] = fileparts(fname); % separate out base name of file 
    images.(name) = imread(fullfile('Images\BasePics', fname)); 
end