12 сентября 2011 г.

автоматическое улучшение качества плохого скана

вот еще одна тема, с которой мен пришлось столкнуться. нашел я одну книженцию на просторах интернета. качество её меня сильно не устроило.


при ближайшем рассмотрении можно увидеть много "шумов". читать можно но...

в программе GIMP я помотрел, можно ли что-нибудь улучшить, используя изменения кривых цвета. затем на ресурсе скриптов для ImageMagick я нашел подходящий скрипт curves.

Transformation Graph (curve with points drawn)

Подбирая две точки, нашел лучше всего подходящие параметры:
./curves -s 100,100 "25,25 75,95" test.jpg test_out.jpg

результат приведён ниже:


после этого, как и ранее, я применил скрипт для циклической обработки всех изображений книги:

#!/bin/bash
# loop_for_fotos.sh
#

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")

#проверяем, установлен ли convert
convert > /dev/null
if [ $? -ne 0 ] ; then
    echo "Error: convert is needed, it's a part of ImageMagick" ;
fi;
DIR=$1;
# велосипед, убирающий "/" в конце
if [ -z $1 ]; then $DIR=`pwd`;
else
    TEMP=`pwd`;
    cd $DIR; TEMP2=`pwd`;
    cd $TEMP;
    DIR=$TEMP2;
    echo $TEMP2;
fi;
#наши старые файлы копируем в DIR.orig
echo $DIR
mkdir $DIR/orig;
cp *.jpg $DIR/orig/
ERR=0;
CPUS=1;
echo "Start in " $DIR
files=$(ls $DIR/*.jpg)
list=($files)
len=${#list[@]}
echo $len
CPUS=2;
echo "Start curve transformation"
for(( i=0; i<$len ; i=i+$CPUS))
do
    for(( j=0; j<$CPUS ; j++))
    do
    if [ ${list[i+j]} ]; then
#echo ${list[i+j]}
    ./curves -s 100,100 "25,25 75,95"  ${list[i+j]} ${list[i+j]}.new.jpg &
    fi
    done;
    for job in `jobs -p`
    do
    echo $job
    wait $job || let "FAIL+=1"
    done;
    if [ $? -eq 0 ]; then
    echo "curve transformation successfully ;) next step";
    else ERR=$[$ERR+1]; #считаем ошибки
    fi;
    for(( j=0; j<$CPUS ; j++))
    do
    if [ ${list[i+j]} ]; then
    mv  ${list[i+j]}.new.jpg ${list[i+j]}
    fi
    done;
done;

if [ $ERR -eq 0 ]; then
    echo "Job done!";
else echo "Job done with some errors.";
fi;
echo "You can find your old files in $DIR.orig"

IFS=$SAVEIFS
#end


попытки обрабатывать пробелы в именах файлов при помощи
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
...
IFS=$SAVEIFS

к успеху не привели, т.к. либо в скрипте curves, либо в самой конвертирующей программе выдаёт ошибку convert: unable to open image... более подробно не выяснял.

точки кривых всегда нужно выяснять экспериментальным путём, в зависимости от качества скана.


автор публикации - Карбофос.

Комментариев нет:

Отправить комментарий