Interpolation von Elementen einer Farbmatrix anhand einiger vorgegebener Referenzelemente

Dies ist mehr oder weniger eine Folgefrage anZwei dimensionale Farbrampe (256x256 Matrix) interpoliert aus 4 Eckfarben das hat jadsq heute zutiefst beantwortet.

Für lineare Verläufe funktioniert die vorherige Antwort sehr gut. Wenn man jedoch die Stoppfarben des Verlaufs besser kontrollieren möchte, scheint diese Methode nicht sehr praktisch zu sein. In diesem Fall können einige Referenzfarbpunkte in einer Matrix (Nachschlagetabelle) hilfreich sein, mit denen Farbwerte für die leere Position in der Nachschlagetabelle interpoliert werden. Was ich meine, ist vielleicht einfacher aus dem folgenden Bild zu lesen.

Die ganze Idee stammt vonhttp: //cartography.oregonstate.edu/pdf/2006_JennyHurni_SwissStyleShading.pd Seite 4 bis 6. Ich habe die Zeitung durchgelesen und verstehe theoretisch, was vor sich geht. Aufgrund meiner geringen Erfahrung mit Interpolationsmethoden und um ehrlich zu sein, allgemeiner mathematischer Fähigkeiten scheitere ich jedoch kläglich. Interessant könnte auch sein, dass sie als Interpolationsmethode eine Sigmoid-Gauß-Glocke verwenden (Seite 6). Sie argumentieren, dass die Gaußsche Gewichtung die visuell besten Ergebnisse erbrachte und einfach zu berechnen war (Gleichung 1 mit k = 0,0002 für eine Tabelle von 256 pro 256 Zellen

Edit (bessere Illustrationen):

Ich habe die anderen Teile der vorgestellten Methoden installiert, aber das Füllen der leeren Werte in der Matrix ist wirklich ein wichtiger Teil und hindert mich daran, fortzufahren. Nochmals vielen Dank für Ihre Hilfe!

Was ich gerade habe:

#!/usr/bin/env python3
import numpy as np
import matplotlib.pyplot as plt 

# the matrix with the reference color elements
ref=np.full([7, 7, 3], [255,255,255], dtype=np.uint8)
ref[0][6] = (239,238,185)
ref[1][1] = (120,131,125)
ref[4][6] = (184,191,171)
ref[6][2] = (150,168,158)
ref[6][5] = (166,180,166)

# s = ref.shape
#
# from scipy.ndimage.interpolation import zoom
# zooming as in https://stackoverflow.com/a/39485650/1230358 doesn't seem to work here anymore, because we have no corner point as reference but randomly distributed points within the matrix. As far as I know ...
# zoomed=zoom(ref,(256/s[0],256/s[1],1),order=1)

plt.subplot(211)
plt.imshow(ref,interpolation='nearest')
# plt.subplot(212)
# plt.imshow(zoomed,interpolation='nearest')
plt.show()

Antworten auf die Frage(4)

Ihre Antwort auf die Frage