DVD SVCD Forum Foren-Übersicht
FAQFAQ     SuchenSuchen     MitgliederlisteMitgliederliste     Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen     ProfilProfil     LoginLogin      RegistrierenRegistrieren 

DVD SVCD Forum Foren-Übersicht -> Grafik & Foto
Fritz Photo
Neue Antwort erstellen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Archimedes 



Anmeldungsdatum: 23.07.2005
Beiträge: 1750

Benutzer-Profile anzeigen Private Nachricht senden
Beitrag Beitrag 0 - Verfasst am: Sa Apr 14, 2007 0:40    Titel: Fritz Photo Antworten mit Zitat

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

Benutzer-Profile anzeigen Private Nachricht senden
Beitrag Beitrag 1 - Verfasst am: Mo Apr 16, 2007 0:41    Titel: Antworten mit Zitat

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

Benutzer-Profile anzeigen Private Nachricht senden
Beitrag Beitrag 2 - Verfasst am: Mo Apr 16, 2007 7:41    Titel: Antworten mit Zitat

Das sieht schon interessant aus..
_________________
Gruß SVCDFan
Archimedes 



Anmeldungsdatum: 23.07.2005
Beiträge: 1750

Benutzer-Profile anzeigen Private Nachricht senden
Beitrag Beitrag 3 - Verfasst am: Mo Apr 16, 2007 23:59    Titel: Antworten mit Zitat

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

Benutzer-Profile anzeigen Private Nachricht senden
Beitrag Beitrag 4 - Verfasst am: Di Apr 17, 2007 23:15    Titel: Antworten mit Zitat

Eine optionale Dateigrößenbeschränkung bei der JPG-Ausgabe habe ich nun auch integriert.

Archimedes 



Anmeldungsdatum: 23.07.2005
Beiträge: 1750

Benutzer-Profile anzeigen Private Nachricht senden
Beitrag Beitrag 5 - Verfasst am: Fr Apr 20, 2007 0:04    Titel: Antworten mit Zitat

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

Benutzer-Profile anzeigen Private Nachricht senden
Beitrag Beitrag 6 - Verfasst am: Mi Jul 11, 2007 13:27    Titel: Antworten mit Zitat

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

Benutzer-Profile anzeigen Private Nachricht senden
Beitrag Beitrag 7 - Verfasst am: Sa Aug 04, 2007 17:08    Titel: Antworten mit Zitat

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

Benutzer-Profile anzeigen Private Nachricht senden
Beitrag Beitrag 8 - Verfasst am: Mo Sep 17, 2007 12:57    Titel: Antworten mit Zitat

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

Benutzer-Profile anzeigen Private Nachricht senden
Beitrag Beitrag 9 - Verfasst am: Mi Okt 03, 2007 19:02    Titel: Antworten mit Zitat

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.
Beiträge der letzten Zeit anzeigen:   


DVD SVCD Forum Foren-Übersicht -> Grafik & Foto
Neue Antwort erstellen


 
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

Datenschutzerklärung


Powered by phpBB © 2001, 2005 phpBB Group