답변1
Imagemagick 사용
이것은 이미지의 총 픽셀 수를 제공합니다.
identify -verbose ~/www/pictures/ISTI-F.jpg | sed -n '/.*Pixels: /s///p'
이것은 주요 색상 이름과 픽셀 수를 제공합니다.
convert ~/www/pictures/ISTI-F.jpg -format "%c" histogram:info: | sort -nr -t: | head -1 | sed 's/\(.*\):.*#\(......\).*/\2\1/'
예:
$ identify -verbose ISTI-F.jpg | sed -n '/.*Pixels: /s///p'
1920000
$ convert ISTI-F.jpg -format "%c" histogram:info: | sort -nr -t: | head -1 | sed 's/\(.*\):.*#\(......\).*/\2\1/'
FFFFFF 1667711
이것은 쉘 스크립트 작성의 기초가 될 수 있지만 Imagemagick은 믿을 수 없을 정도로 유연하지만 느리기 때문에 많은 파일을 검사하는 데는 좋지 않습니다.
옥타브 사용
다음 Octave 스크립트는 명령줄에서 직접 호출할 수 있습니다. 인수는 두 개의 디렉터리 이름 errdir
과 baddir
이미지 파일 목록이어야 합니다. Octave에서 사용하는 LibMagick++ 라이브러리가 경고 또는 오류를 표시하는 파일은 errdir
; 행의 마지막 25%가 동일한 색상인 파일은 로 이동됩니다 baddir
. 다른 파일은 그대로 유지됩니다. 간결한 보고서가 표준 출력에 제공됩니다.
파일을 이동하지 않고 보고서만 원하는 경우 처음 두 인수로 디렉터리 이름을 제공하지 마세요.
#!/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
이 기능을 사용하려면 Octave가 설치되어 있어야 합니다. 위의 내용을 이라는 파일에 복사하고 badimage
실행 가능하게 만들고 chmod +x badimage
다음과 같은 스크립트를 테스트합니다 ./badimage *.jpg
. 상태(양호, 불량, 오류)와 함께 파일 목록이 표시됩니다.
출력을 살펴보고 보다 공격적(낮은 임계값) 또는 보다 보수적인(높은 임계값) 동작을 위해 스크립트 내부의 임계값을 변경할 수 있습니다. 이미지 파일명만 인수로 주면 파일을 이동하거나 변경하지 않으므로 원하는 만큼 테스트할 수 있습니다.
결과에 만족하면 두 개의 디렉터리를 만듭니다 mkdir errpics badpics
. 그런 다음 스크립트를 ./badimage errpics badpics *.jpg
. 이런 식으로 스크립트는 위에서 설명한 대로 디렉터리의 파일을 이동합니다.
주의 사항: 이 스크립트를 사용한 후에는 삭제하기 전에 불량 또는 오류가 있는 것으로 표시된 이미지의 좋은 샘플을 확인하세요!
불량 이미지를 감지하는 알고리즘은 사진에는 신뢰할 수 있지만 동일한 색상의 합법적인 영역이 광범위하게 포함될 수 있는 그림, 로고, 다이어그램, 그래프에는 반드시 그런 것은 아닙니다. 오류가 발생한 파일은 LibMagick++의 관점에서 불량하거나 손상되었을 수 있지만 일반적으로 더 관대한 이미지 시각화 도구에서는 잘 읽을 수 있습니다.