lieber roland!
ich glaube, ich hab da etwas für dich, dass dich evtl. in in deinen gewissheiten und ansichten nicht weniger erschüttern dürfte als wir es uns von anderen kollegen hier im forum hin und wieder wünschen würden. ;)
es hat mir nämlich keine ruhe gelassen, darüber nachzusinnen, wie weit deine annahme von homogenen flächen tatsächlich in praxis anzutreffen ist, oder ob das nicht viel mehr ein ähnliches trugbild darstellt, wie es andere hier regelmäßig ausbreiten.
ich hab also einfach zwei testaufnahmen mit meiner gh4 gemacht und aus dem ffmpeg daaus mit folgendem befehl ein 16bit graustufenbild exportiert, das nur die information im Y-kanal enthält:
Code: Alles auswählen
ffmpeg -i P1250334.MOV -ss 5 -vframes 1 -vf extractplanes=y -pix_fmt gray16le bild1_4k.png
(einfach draufklicken, um es in originalgrößer downzuloaden)
zum vergleich habe ich dann die videos auf ein viertel verkleinert und in gleicher weise bilder generiert:
Code: Alles auswählen
ffmpeg -i P1250334.MOV -ss 5 -vframes 1 -vf extractplanes=y -pix_fmt gray16le -vf scale=size=hd1080:sws_dither=none:flags=bitexact bild1_2k.png
die bilder enthalten natürlich keine besonders aufregende information, sondern wurden vielmehr völlig unscharf, d.h. mit gänzlich falscher fokusierung, von einem ausdruck mit horizontalen sinusmustern abgefilmt, um möglichst fließende übergänge im bild zu erhalten. ganz ideal ist das allerdings ohnehin nicht gelungen, weil vermutlich ein noch subtilerer übergang aussagekräftiger wäre. das erste bild wurde mit 800 ISO und standard profil aufgenommen, während im zweiten fall 200 ISO und Cine-D verwendet wurde.
aus diesen bildern habe ich jeweils in der mitte eine horizontale zeile herausgegriffen und deren werte genauer untersucht.
auf den ersten blick schaut das ja noch recht unspektakulär aus:
spannend wird es erst, wenn man in die graphen ein klein wenig rein zoomt:
als kenner entsprechender moderner kunst, brauche ich dir vermutlich nicht lange zu erklären, warum das dortige 8bit signal genau diese eigenartige, auf den ersten blick etwas unansehnliche form zeigt. das sind genau jene muster, die ich mit literaturverweisen unter dem stichwort: "dithering" hier ohnehin bereits ein paar mal anzusprechen versucht habe.
allerdings muss ich zugeben, dass ich mir selbst nicht ganz sicher war, ob ich derartiges im entpackten signal einer hoch komprimierten kameraufzeichnung finden werde? es wäre ziemlich spannend, es auch noch mit unverarbeitetem material direkt aus der kamera zu vergleichen. es könnte sich ja durchaus auch um dithering auf seiten der ffmpeg dekompression handeln könnte, um errechnete zwischenwerte bspw. im deblocking prozess im 8bit resultat adäquat wiederzugeben.
was es aber auf jeden fall unverkennbar belegt, ist die tatsache, dass du mit deiner etwas vereinfachenden vorstellung homogener flächen in den videodaten an der praxis ziemlich weit vorbeizielen dürftest. ich fürchte, in dem punkt unterliegst du genauso sehr einem viel zu einfach gedachtem gedankenmodell, wie wir das gerne anderen ankreiden. ich kann das aber natürlich bestens nachvollziehen. trotzdem: genau solche geschichten, die man auf den ersten blick nicht erwarten würde, machen die dinge doch erst spannend! ;)
ich glaube ganz generell, dass die dithering problematik von sehr vielen kollegen viel zu achtlos beiseite geschoben oder gar nicht erst verstanden wird, obwohl sie in der praxis kaum weniger bedeutsamkeit haben dürfte als 8 od. 10bit auflösungsbeschränkung und verarbeitungsmöglichkeiten.
ein kleines bild kann ich noch anfügen -- obwohl es eigentlich nicht sehr viel unerwartetes enthält:
das ganze ist übrigens wirklich ausgesprochen einfach mit ein paar zeilen python auch praktisch nachzuvollziehen:
Code: Alles auswählen
#!/usr/bin/env python
import numpy as np
from scipy import misc
import matplotlib.pyplot as plt
bild_4k = misc.imread('bild2_4k.png')
line_4k = bild_4k[1080] >> 6
bild_2k = misc.imread('bild2_2k.png')
line_2k = np.repeat(bild_2k[540], 2) >> 6
plt.plot(line_4k, drawstyle='steps', color='cyan', label='uhd2160')
plt.plot(line_2k, drawstyle='steps', color='red', label='hd1080')
plt.xlabel("Horizontale Position des Pixels")
plt.ylabel("10bit Y-Signal")
#plt.magnitude_spectrum(line_4k, scale='dB', color='cyan', label='uhd2160')
#plt.magnitude_spectrum(line_2k, scale='dB', color='red', label='hd1080')
plt.legend()
plt.show()
obwohl ich nach diesem praktischen durchprobieren meine erste neugierde wieder ein wenig gestillt habe, getraue ich mich keineswegs zu behaupten, die sache damit bereits verstanden zu haben und klar beurteilen zu können. als kleine anregung zum weiterdenken, könnte es aber vielleicht auch für andere hier von interesse sein.