Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Archimedes 
Anmeldungsdatum: 23.07.2005 Beiträge: 1750
|
Beitrag 0 - Verfasst am: Sa Apr 14, 2007 0:40 Titel: Fritz Photo |
 |
|
Nachdem ich mit den verfügbaren Lösungen nicht so recht glücklich geworden bin (immer war irgendetwas ), habe ich mir einen eigenen Resizer gebastelt (ist allerdings noch ein „Rohentwurf“). Und zwar auf der Grundlage von AviSynth.
Im Programm lädt man zunächst die Bilder, dann den entsprechenden AviSynth-Script - denn man natürlich jederzeit ändern kann – und anschließend nimmt man noch ein paar Einstellungen vor (gewünschte Skalierung, JPG-Qualität etc.). Das Programm besitzt die gleiche Oberläche wie Fritz Framalyzer. Mit geigneten AviSynth-Scripts lassen sich mit Sicherheit auch brauchbare Entrauschungsergebnisse á la Neat Image & Co. erzeugen. Das Programm wird also wesentlich mehr können, als bloß verkleinern und nachschärfen. ;-) Nachteil der AviSynth-Lösung ist allerdings, dass nicht alle Plugins bzw. verfügbaren Scripte den RGB-Farbraum unterstützen.
Download >>
Zuletzt bearbeitet von Archimedes am Mo Jul 30, 2007 12:24, insgesamt einmal bearbeitet |
|
 |
Archimedes 
Anmeldungsdatum: 23.07.2005 Beiträge: 1750
|
Beitrag 1 - Verfasst am: Mo Apr 16, 2007 0:41 Titel: |
 |
|
Hier schon mal ein paar Bildschirmausdrucke. Benötigt wird AviSynth 2.5.6 oder höher.
 |
|
 |
SVCDFan  WM-Tipp König 2006
Anmeldungsdatum: 20.09.2001 Beiträge: 7567
|
Beitrag 2 - Verfasst am: Mo Apr 16, 2007 7:41 Titel: |
 |
|
Das sieht schon interessant aus..  _________________ Gruß SVCDFan |
|
 |
Archimedes 
Anmeldungsdatum: 23.07.2005 Beiträge: 1750
|
Beitrag 3 - Verfasst am: Mo Apr 16, 2007 23:59 Titel: |
 |
|
Und funktioniert auch schon. ;-)
Das Programm bietet nun als Zielformate BMP, JPG, PNG, PPM, TGA und TIF an.
Durch die AviSynth-Filterung gehen die EXIF-Daten verloren - eigentlich. ;-) Habe deswegen auch noch eine Option „Original EXIF-Daten behalten“ integriert.
Beim JPG-Format könnte man auch noch eine max. Dateigröße definieren, die nicht überschritten werden darf. Für eine feststehende Dateigröße wird dann die max. mögliche Qualität ermittelt. |
|
 |
Archimedes 
Anmeldungsdatum: 23.07.2005 Beiträge: 1750
|
Beitrag 4 - Verfasst am: Di Apr 17, 2007 23:15 Titel: |
 |
|
Eine optionale Dateigrößenbeschränkung bei der JPG-Ausgabe habe ich nun auch integriert.
 |
|
 |
Archimedes 
Anmeldungsdatum: 23.07.2005 Beiträge: 1750
|
Beitrag 5 - Verfasst am: Fr Apr 20, 2007 0:04 Titel: |
 |
|
Eine erste Preview-Version habe ich schon mal hochgeladen. Das Programm benötigt AviSynth 2.56 oder höher. Würde mich freuen, wenn eine Rückmeldung käme, dass das Programm auch unter Vista läuft. ;-)
Die Bedienung sollte eigentlich aus dem Programmablauf zu ersehen sein.
1. Bilder laden
Es werden momentan die Formate BMP, JPG, PNG, PPM, TGA und TIF unterstützt (je nach den Fähigkeiten des gewählten AviSynth-Filters zum Einlesen von Bildern).
2. AviSynth-Script laden
Im Vorlagenverzeichnis befinden sich bereits ein paar einfache Scripte zum Verkleinern von Bildern. Allerdings noch ohne das (notwendige) Nachschärfen, da ich mich hierüber auch erst meine Gedanken machen muss. Momentan bieten sich für den RGB-Farbraum die Filter Sharpen() und Msharpen() an. Gerade der letztere scheint mir interessant zu sein. Brauchbare Scripte werden sich sicher finden lassen. ;-)
In den Scripten wird man auch auf Schlüsselwörter stoßen, die dann vom Programm an entsprechender Stelle ersetzt werden („$FileName“, „$Width“ und „$Height“). Vor allem das Schlüsselwort „$FileName“ darf nicht ersetzt werden.
3. Einstellungen
Die Zahlen für die Breite und Höhe eines Bildes ersetzen später im AviSynt-Script die Schlüsselwörter „$Width“ und „$Height“ (falls vorhanden). Bei der Skalierung wird darauf geachtet, dass die eingestellte Größe nicht überschritten wird. Gegebenenfalls stimmt das resultierende Bild nur mit einer Seite (Höhe oder Breite) überein.
Beim JPG-Format kann man zwischen einer festen und einer variablen JPG-Qualität wählen. Im letzteren Fall gibt man einfach eine Dateigröße an, die nicht überschritten werden darf. Das Programm ermittelt dann die maximal mögliche JPG-Qualität.
Wenn kein Zielverzeichnis angegeben wird, werden die Dateien in das gleiche Verzeichnis geschrieben, wo sich die Originaldateien befinden. Die Dateien erhalten dabei Namen nach folgendem (AviSynth-)Muster: <Originaldateiname>_000000.<ext>.
4. Zusammenfassung
Hier kann man noch mal alle Einstellungen kontrollieren und die Konvertierung starten.
Zuletzt bearbeitet von Archimedes am Mo Jul 30, 2007 12:23, insgesamt 2-mal bearbeitet |
|
 |
Archimedes 
Anmeldungsdatum: 23.07.2005 Beiträge: 1750
|
Beitrag 6 - Verfasst am: Mi Jul 11, 2007 13:27 Titel: |
 |
|
Noch ein kleiner Nachtrag…
…der Vollständigkeit halber…
…in mein Tagebuch.
Zunächst schien es ja so, als könnte man Scripte à la LimitedSharpen wegen der Farbraumproblematik (LimitedSharpen unterstützt nur den YV12-Farbraum) nicht verwenden. EC’03@forum.gleitz.info brachte den Stein ins Rollen. Warum nicht einfach den RGB-Farbraum in drei getrennte Y-Kanäle eines YV12-Farbraumes aufsplitten und am Ende wieder zusammenführen? Ein entsprechendes Plugin mit dem Namen „rgbhack.dll“ für AviSynth ist verfügbar.
Zitat: | RGBtoY puts R, G or B channel from a RGB source -> Y channel of a YV12 clip
RGBtoY(0) = R -> Y
RGBtoY(1) = G -> Y
RGBtoY(2) = B -> Y
YYYToRGB combines the Y channels of 3 YV12 clips -> a RGB clip
YYYToRGB(Clip_Blue,Clip_Green,Clip_Red) |
Ein Script zum Verkleinern und Nachschärfen von Bildern könnte wie folgt aussehen:
Code: | LoadPlugin("C:\Programme\AviSynth 2.5\plugins\RemoveGrain\RemoveGrain.dll")
LoadPlugin("C:\Programme\AviSynth 2.5\plugins\mt_masktools.dll")
LoadPlugin("C:\Programme\AviSynth 2.5\plugins\warpsharp.dll")
LoadPlugin("C:\Programme\AviSynth 2.5\plugins\rgbhack.dll")
Import("lib\LimitedSharpenFaster.avs")
ImageSource("$FileName", end=0, use_DevIL=False, pixel_type="RGB24")
Source = LanczosResize($Width, $Height)
R = Source.RGBtoY(0).lsf()
G = Source.RGBtoY(1).lsf()
B = Source.RGBtoY(2).lsf()
$Clip = YYYToRGB(B, G, R).ConvertToRGB32()
Return $Clip
function lsf(clip input) {
input.LimitedSharpenFaster(
\ ss_x=1.0,
\ ss_y=1.0,
\ Smode=3,
\ strength=50,
\ Lmode=1,
\ wide=false,
\ overshoot=0,
\ undershoot=0,
\ soft=0,
\ edgemode=0,
\ special=false,
\ exborder=0
\ )
} |
|
|
 |
Archimedes 
Anmeldungsdatum: 23.07.2005 Beiträge: 1750
|
Beitrag 7 - Verfasst am: Sa Aug 04, 2007 17:08 Titel: |
 |
|
Nachdem die Scripte zum Verkleinern schon gute Ergebnisse zu Tage fördern, hier ein Script zum Entrauschen eines Bildes.
Die „wichtigsten Parameter“ habe ich in einem Block zusammengefasst.
Code: | sigma = 2.0
bw = 32
bh = 32
limit = 0
strength = 0 |
Der Parameter sigma bestimmt die Stärke der Entrauschung. Die Blockgröße kann man mit den Werten bw und bh einstellen. Werte unter 8 sollten aber vermieden werden. Mit limit kann man bestimmten, um wieviel ein Pixelwert sich ändern darf. Damit kann man, wenn man so will, ein abschließendes „Feintuning“ vornehmen. Mit strength lässt sich ein entrauschtes Bild homöopathisch nachschärfen (sofern überhaupt nötig).
Code: | LoadPlugin("plugins\FFT3DFilter\FFT3DFilter.dll")
LoadPlugin("plugins\MaskTools 1.5.8\MaskTools.dll")
LoadPlugin("plugins\MaskTools 2\mt_masktools.dll")
LoadPlugin("plugins\RemoveGrain 1.0\RemoveGrain.dll")
LoadPlugin("plugins\RGBHack\rgbhack.dll")
LoadPlugin("plugins\WarpSharp\warpsharp.dll")
Import("lib\LimitedSharpen\LimitedSharpenFaster.avs")
Source = ImageSource("$FileName", end=0, use_DevIL=False, pixel_type="RGB24")
R = Source.RGBtoY(0).fft3df()
G = Source.RGBtoY(1).fft3df()
B = Source.RGBtoY(2).fft3df()
$Clip = YYYToRGB(B, G, R)
Return $Clip
function fft3df(clip input) {
sigma = 2.0
bw = 32
bh = 32
limit = 0
strength = 0
source = input
sigma == 0 ? input : input.\
FFT3DFilter(
\ sigma = sigma,
\ sigma2 = sigma,
\ sigma3 = sigma,
\ sigma4 = sigma,
\ beta = 1.0,
\ plane = 0,
\ bw = bw,
\ bh = bh,
\ bt = 1,
\ ow = bw/2,
\ oh = bh/2,
\ kratio = 2.0,
\ sharpen = 0.0,
\ scutoff = 0.3,
\ svr = 1.0,
\ smin = 4.0,
\ smax = 20.0,
\ measure = true,
\ interlaced = false,
\ wintype = 0,
\ pframe = 0,
\ px = 0,
\ py = 0,
\ pshow = false,
\ pcutoff = 0.1,
\ pfactor = 0.0,
\ degrid = 1.0,
\ dehalo = 0.0,
\ hr = 2.0,
\ ht = 50.0,
\ ncpu = 1
\ )
LL = string(limit)
STR = "x "+LL+" + y < y "+LL+" - x "+LL+" - y > y "+LL+" + x ? ?"
limit == 0 ? last : yv12lutxy(last, source, yexpr=STR, U=2, V=2)
strength == 0 ? last : last.\
LimitedSharpenFaster(
\ ss_x = 1.0,
\ ss_y = 1.0,
\ Smode = 3,
\ strength = strength,
\ radius = 2,
\ Lmode = 1,
\ wide = false,
\ overshoot = 0,
\ undershoot = 0,
\ soft = 0,
\ edgemode = 0,
\ special = false,
\ exborder = 0
\ )
} |
Ist bei großen Bildern allerdings quälend langsam.
Eine schnellere Variante stellt FFT3dGPU dar (ein entsprechendes Script ist in den Vorlagen enthalten) – läuft allerdings nicht auf allen Rechnern (abhängig von der verwendeten Grafikkarte). |
|
 |
Archimedes 
Anmeldungsdatum: 23.07.2005 Beiträge: 1750
|
Beitrag 8 - Verfasst am: Mo Sep 17, 2007 12:57 Titel: |
 |
|
Die Sache mit dem Aufdröseln in drei getrennte „Y-Kanäle“ hat sich mittlerweile ja auch erledigt. Das obige Script machte Probleme beim Entfernen von Farbrauschen.
Mit einem kleinen Trick kommt man aber trotzdem zum Ziel. Um keine Chrominanzinformationen zu verlieren, muss man das RGB-Bild vor der Umwandlung in den YV12-Farbraum mit PointResize nur auf die doppelte Größe aufblasen. Nach der Umwandlung stehen dann die vollen Chromaninanzinformationen zur Verfügung. Lediglich der Helligkeitskanal liegt in doppelter Auflösung vor. Man muss bei einer Filteranwendung nur dafür Sorge tragen, dass der Helligkeitskanal in der ursprünglichen Auflösung, also halbiert zugeführt wird.
Das Script zum Entrauschen sieht nun wie folgt aus:
Code: | LoadPlugin("plugins\FFT3DFilter\FFT3DFilter.dll")
LoadPlugin("plugins\MaskTools 1.5.8\MaskTools.dll")
LoadPlugin("plugins\MaskTools 2\mt_masktools.dll")
LoadPlugin("plugins\RemoveGrain 1.0\RemoveGrain.dll")
LoadPlugin("plugins\WarpSharp\warpsharp.dll")
Import("lib\LimitedSharpen\LimitedSharpenFaster.avs")
# -------------
sigma_y = 2.0
sigma_u = 0.0
sigma_v = 0.0
bw = 32
bh = 32
limit = 0
strength = 0
# -------------
ImageSource("$FileName", end=0, use_DevIL=False, pixel_type="RGB32")
Crop(0, 0, -last.Width % 2, -last.Height % 2)
PointResize(last.Width * 2, last.Height * 2)
ConvertToYV12(matrix="pc.601")
fft3df(sigma_y, sigma_u, sigma_v, bw, bh, limit)
lsf(strength)
ConvertToRGB32(matrix="pc.601")
PointResize(last.Width / 2, last.Height / 2)
$Clip = last
Return $Clip
function fft3df(clip input, float sigma_y, float sigma_u, float sigma_v, int bw, int bh, int limit) {
sigma_y == 0 ? input : input.PointResize(input.Width / 2, input.Height / 2).\
FFT3DFilter(
\ sigma = sigma_y,
\ sigma2 = sigma_y,
\ sigma3 = sigma_y,
\ sigma4 = sigma_y,
\ beta = 1.0,
\ plane = 0,
\ bw = bw,
\ bh = bh,
\ bt = 1,
\ ow = bw/2,
\ oh = bh/2,
\ kratio = 2.0,
\ sharpen = 0.0,
\ scutoff = 0.3,
\ svr = 1.0,
\ smin = 4.0,
\ smax = 20.0,
\ measure = true,
\ interlaced = false,
\ wintype = 0,
\ pframe = 0,
\ px = 0,
\ py = 0,
\ pshow = false,
\ pcutoff = 0.1,
\ pfactor = 0.0,
\ degrid = 1.0,
\ dehalo = 0.0,
\ hr = 2.0,
\ ht = 50.0,
\ ncpu = 1
\ ).\
PointResize(input.Width, input.Height).MergeChroma(input, 1)
LL = string(limit)
STR = "x "+LL+" + y < y "+LL+" - x "+LL+" - y > y "+LL+" + x ? ?"
limit == 0 ? last : yv12lutxy(last, input, yexpr=STR, U=2, V=2)
sigma_u == 0 ? last : last.\
FFT3DFilter(
\ sigma = sigma_u,
\ sigma2 = sigma_u,
\ sigma3 = sigma_u,
\ sigma4 = sigma_u,
\ beta = 1.0,
\ plane = 1,
\ bw = bw,
\ bh = bh,
\ bt = 1,
\ ow = bw/2,
\ oh = bh/2,
\ kratio = 2.0,
\ sharpen = 0.0,
\ scutoff = 0.3,
\ svr = 1.0,
\ smin = 4.0,
\ smax = 20.0,
\ measure = true,
\ interlaced = false,
\ wintype = 0,
\ pframe = 0,
\ px = 0,
\ py = 0,
\ pshow = false,
\ pcutoff = 0.1,
\ pfactor = 0.0,
\ degrid = 1.0,
\ dehalo = 0.0,
\ hr = 2.0,
\ ht = 50.0,
\ ncpu = 1
\ )
sigma_v == 0 ? last : last.\
FFT3DFilter(
\ sigma = sigma_v,
\ sigma2 = sigma_v,
\ sigma3 = sigma_v,
\ sigma4 = sigma_v,
\ beta = 1.0,
\ plane = 2,
\ bw = bw,
\ bh = bh,
\ bt = 1,
\ ow = bw/2,
\ oh = bh/2,
\ kratio = 2.0,
\ sharpen = 0.0,
\ scutoff = 0.3,
\ svr = 1.0,
\ smin = 4.0,
\ smax = 20.0,
\ measure = true,
\ interlaced = false,
\ wintype = 0,
\ pframe = 0,
\ px = 0,
\ py = 0,
\ pshow = false,
\ pcutoff = 0.1,
\ pfactor = 0.0,
\ degrid = 1.0,
\ dehalo = 0.0,
\ hr = 2.0,
\ ht = 50.0,
\ ncpu = 1
\ )
}
function lsf(clip input, int strength) {
strength == 0 ? input : input.PointResize(input.Width / 2, input.Height / 2).\
LimitedSharpenFaster(
\ ss_x = 1.0,
\ ss_y = 1.0,
\ Smode = 3,
\ strength = strength,
\ radius = 2,
\ Lmode = 1,
\ wide = false,
\ overshoot = 0,
\ undershoot = 0,
\ soft = 0,
\ edgemode = 0,
\ special = false,
\ exborder = 0
\ ).\
PointResize(input.Width, input.Height).MergeChroma(input, 1)
} |
Original
FFT3DFilter (sigma_y=4.4, sigma_u=8.0, sigma_v=8.0, bw=16, bh=16, limit=0, strength=0)
Das Programm ersetzt zwar keine „vollwertige Bildbearbeitung“ – das war auch nicht mein Ansinnen -, aber einige Dinge lassen sich damit schon ganz gut lösen. ;-) |
|
 |
Archimedes 
Anmeldungsdatum: 23.07.2005 Beiträge: 1750
|
Beitrag 9 - Verfasst am: Mi Okt 03, 2007 19:02 Titel: |
 |
|
Das Programm wurde jetzt um die Möglichkeit, Scripte manuell zusammenzustellen, erweitert. Auf diese Weise ist man wesentlich flexibler.
Will man z. B. Bilder verkleinern, so braucht man nur noch Spline36Resize und LimitedSharpen der Jobliste hinzufügen und bei Bedarf abändern. |
|
 |
|