질문에는명령줄에서 "잘못된" 이미지 감지, 잘못된 이미지를 감지하는 Octave 스크립트가 있습니다. Mac OSX에서 홈브류 Octave 설치를 실행하려고 합니다.
#!/usr/bin/octave -qf
threshold = 0.25;
usage = "Usage is: badfiles <file...> OR badfiles <errdir> <baddir> <file...>\n";
files\n";
assert(nargin>0, usage);
dryrun = isfile(argv{1});
if !dryrun
errdir = argv{1};
baddir = argv{2};
assert(isfolder(errdir) && isfolder(baddir) && isfile(argv{3}), usage);
endif
start = 1 + 2*(!dryrun);
for fname = argv()(start:end)'
q = [];
f = fname{};
warning error
try
q = imread(fname{});
catch err
end_try_catch
warning on
if isempty(q)
printf("error\t");
dryrun || movefile(f, errdir);
else
qt = all(q == q(end,1,:) ,2);
qtt = squeeze(all(qt, 3));
r = 1 - find(qtt==0, 1, 'last') / size(q, 1);
if (r > threshold)
printf("bad--%02d\t", ceil(100*r));
dryrun || movefile(f, baddir);
else
printf("good-%02d\t", ceil(100*r));
endif
endif
disp(f);
endfor
하지만 실행할 수 없으며 소싱 오류가 발생합니다. 아래 4번째 줄에 오타가 있나요?
파일\n";
이 줄은 무엇이어야합니까? 주석 처리하면 18행에 "오류: 잘못된 null 인덱스 표현식"이 표시됩니다.
f = f이름{};
답변1
분명히 최신 버전의 Octave에서는 인덱스 표현식이 null일 수 없습니다. 색인에 "1"을 넣으면 문제가 해결됩니다.
#!/usr/bin/octave -qf
threshold = 0.25;
usage = "Usage is: badfiles <file...> OR badfiles <errdir> <baddir> <file...>\n";
assert(nargin>0, usage);
dryrun = isfile(argv{1});
if !dryrun
errdir = argv{1};
baddir = argv{2};
assert(isfolder(errdir) && isfolder(baddir) && isfile(argv{3}), usage);
endif
start = 1 + 2*(!dryrun);
for fname = argv()(start:end)'
q = [];
f = fname{1};
warning error
try
q = imread(fname{1});
catch err
end_try_catch
warning on
if isempty(q)
printf("error\t");
dryrun || movefile(f, errdir);
else
qt = all(q == q(end,1,:) ,2);
qtt = squeeze(all(qt, 3));
r = 1 - find(qtt==0, 1, 'last') / size(q, 1);
if (r > threshold)
printf("bad--%02d\t", ceil(100*r));
dryrun || movefile(f, baddir);
else
printf("good-%02d\t", ceil(100*r));
endif
endif
disp(f);
endfor