Hier sind zwei triviale Ansätze mit ImageMagick und Unix-Tools.
Eingangsbild (von http://im.snibgo.com/dcrawwb.htm)
1) Erhalten des Referenz Cyanfarbe von http://xritephoto.com/documents/literature/en/ColorData-1p_EN.pdf
cyan_ref="srgb(8,133,161)"
cyan_ref=`echo $cyan_ref | tr -cs "[0-9]*\n" " " | sed 's/^[ ]*//'`
echo "$cyan_ref"
8 133 161
Separate die R-, G- und B-Werte
cyan_ref_r=`echo $cyan_ref | cut -d\ -f1`
cyan_ref_g=`echo $cyan_ref | cut -d\ -f2`
cyan_ref_b=`echo $cyan_ref | cut -d\ -f3`
2) Beschneide ein kleines Rechteck aus dem Bild und erhalte die durchschnittlich gemessene Farbe für den Cyan-Patch. Konvertieren
cyan_mea=`convert cyan_measure.png -scale 1x1! -format "[pixel:u.p{0,0}]" info:`
echo "cyan_mea=$cyan_mea"
srgb(2,147,187)
cyan_mea=`echo $cyan_mea | tr -cs "[0-9]*\n" " " | sed 's/^[ ]*//'`
echo "$cyan_mea"
2 147 187
Separate die R-, G- und B-Wert
cyan_mea_r=`echo $cyan_mea | cut -d\ -f1`
cyan_mea_g=`echo $cyan_mea | cut -d\ -f2`
cyan_mea_b=`echo $cyan_mea | cut -d\ -f3`
3) Berechne die Abweichungen als Prozent (bezogen auf 255)
red_pct=`convert xc: -format "%[fx:(cyan_ref_r-cyan_mea_r)/255]" info:`
green_pct=`convert xc: -format "%[fx:(cyan_ref_g-cyan_mea_g)/255]" info:`
blue_pct=`convert xc: -format "%[fx:(cyan_ref_b-cyan_mea_b)/255]" info:`
4) das bild:
convert ftc_typ_sm.jpg \
-channel r -evaluate add $red_pct% +channel \
-channel g -evaluate add $green_pct% +channel \
-channel b -evaluate add $blue_pct% +channel \
ftc_typ_sm_corrected_rgb.jpg
Jetzt haben Sie ein korrigiertes Bild und eine andere Farbe aus dem Diagramm oder Bild messen können.
Wenn Ihre Bilder cmyk sind, dann machen Sie das gleiche für c, m, y, k oder konvertieren Sie in RGB und machen Sie das obige.
Alternativ können Sie dies in HCL Farbraum tun:
1) Holen Sie sich das Referenz Cyanfarbe von http://xritephoto.com/documents/literature/en/ColorData-1p_EN.pdf und konvertieren zu HCL (oder HSL oder HSV usw.).
cyan_ref="srgb(8,133,161)"
cyan_ref_hcl=`convert xc:"$cyan_ref" -colorspace HCL -format "%[pixel:u.p{0,0}]" info: | tr -cs "[0-9]*\n" " " | sed 's/^[ ]*//'`
echo "$cyan_ref_hcl"
191 60 39
Separate die h, c, L-Werte
cyan_ref_h=`echo "$cyan_ref_hcl" | cut -d\ -f1`
cyan_ref_c=`echo "$cyan_ref_hcl" | cut -d\ -f2`
cyan_ref_l=`echo "$cyan_ref_hcl" | cut -d\ -f3`
2) der Cyan-Swatch messen und den Mittelwert zu HCL
cyan_mea=`convert cyan_measure.png -scale 1x1! -format "%[pixel:u.p{0,0}]" info:`
echo "$cyan_mea"
srgb(2,147,187)
cyan_mea_hcl=`convert xc:"$cyan_mea" -colorspace HCL -format "%[pixel:u.p{0,0}]" info: | tr -cs "[0-9]*\n" " " | sed 's/^[ ]*//'`
echo "$cyan_mea_hcl"
193 73 42
Separate die h wandeln, c , l Werte
cyan_mea_h=`echo "$cyan_mea_hcl" | cut -d\ -f1`
cyan_mea_c=`echo "$cyan_mea_hcl" | cut -d\ -f2`
cyan_mea_l=`echo "$cyan_mea_hcl" | cut -d\ -f3`
3) die Differenzen berechnen und
cyan_h_diff=$((cyan_ref_h-cyan_mea_h))
cyan_c_diff=$((cyan_ref_c-cyan_mea_c))
cyan_l_diff=$((cyan_ref_l-cyan_mea_l))
echo "cyan_h_diff=$cyan_h_diff; cyan_c_diff=$cyan_c_diff; cyan_l_diff=$cyan_l_diff;"
cyan_h_diff=-2; cyan_c_diff=-13; cyan_l_diff=-3;
modh=`convert xc: -format "%[fx:100+$cyan_h_diff*200/360]" info:`
modc=$((100+cyan_c_diff))
modl=$((100+cyan_l_diff))
echo "modh=$modh; modc=$modc; modl=$modl"
modh=98.8889; modc=87; modl=97
4) Verarbeiten des Bildes
convert ftc_typ_sm.jpg -define modulate:colorspace=HCL -modulate $modh,$modc,$modl ftc_typ_sm_corrected_hcl.jpg
auf Werte geeignet für -modulate (siehe http://www.imagemagick.org/script/command-line-options.php#modulate) ändern, Für mo re genaue Ansätze:
1) Machen Sie die RGB-Methode für alle Farbfelder und berechnen Sie die durchschnittlichen R, G, B Unterschiede.
2) Sind die HCL-Methode und berechne die durchschnittliche H, C, L Unterschiede
3) gleiche tun, aber eine Nachschlagetabelle für jede der roten, grünen und blauen (oder Farbton, Chroma, Helligkeit berechnen) Kanäle von den Paaren von Eingabe- und Ausgabewerten von jedem Farbfeld in dem Bild und der Referenztabelle.
Ein Gedanke ist, Ihr Bild in HSL oder HSV oder HCL umzuwandeln. Konvertieren Sie Ihr kalibriertes Cyan-Farbfeld in denselben Farbraum. Finde dann den Unterschied in den 3 Farbkanalwerten (H, S oder C, L oder V). Dann wandle das Bild in sRGB um, benutze -modulate, um das Bild um denselben Unterschied zu verschieben. Dann konvertieren Sie das Ergebnis zurück nach CMYK (vorausgesetzt, Ihre Eingabe war CMYK). Beachten Sie, dass -modulate Werte zwischen 0 und 200 hat, wobei 100 keine Änderung bedeutet. Sie müssen also die Werte für H, S oder C und L oder V entsprechend konvertieren. H ist das Schwierige, da es zwischen 0 und 360 liegt. Wenn Sie Hilfe brauchen, lassen Sie es mich wissen. – fmw42
FORTSETZUNG: Sie können den Wert auch einfach durch Addition oder Multiplikation in den H-, S-, C-, L- oder V-Kanälen verschieben und zurück in Ihren ursprünglichen Farbraum konvertieren. Tun Sie dies, nachdem Sie die Farbunterschiede oder -verhältnisse von H, S oder C, L oder V aus den zwei Cyanbereichen erhalten haben. – fmw42
Wow, tolle Antworten (aber ich kann das nicht als Antworten markieren, da du sie als Kommentare geschrieben hast). Das ist alles so neu für mich und es wird eine Weile dauern, diese Vorschläge zu testen. Wenn Sie ein konkretes Beispiel mit einem Beispielbild und dem erforderlichen Code bereitstellen können, wäre das sehr hilfreich. Vielen Dank! –