Я пишу функцию, которая находит аппроксимацию ранга изображения.Мне удалось заставить его работать, когда K равно 1 и 2, но я не могу найти способ сделать обобщенную функцию.Кроме того, мне удалось создать переменные U / Vh / s, вызвав linalg.svd ().
Для ранга 2 я сделал что-то вроде этого, чтобы объединить изображения и те, которые успешно работали, чтобы суммировать SVD
rank1TotalOne = np.dstack((rank1Redone, rank1Greenone, rank1Blueone))
rank1TotalTwo = np.dstack((rank1Redtwo, rank1Greentwo, rank1Bluetwo))
plt.imshow((rank1TotalOne + rank1TotalTwo).astype(int))
Теперь я попытался обобщить это примерно так, но мои изображения не отображаются правильно.
k = 10
rankTotal = 0
j = 0
for i in range(0, k):
while(j < k):
columnVect = UR[:, j].reshape(300,1)
rowVect = VhR.T[:,j].reshape(1, 200)
rank1Red = sR[j] * columnVect * rowVect
columnVect = UG[:, j].reshape(300,1)
rowVect = VhG.T[:,j].reshape(1,200)
rank1Green = sG[j] * columnVect * rowVect
columnVect = UB[:, j].reshape(300,1)
rowVect = VhB.T[:,j].reshape(1,200)
rank1Blue = sB[j] * columnVect * rowVect
rank1Total = rank1Total + np.dstack((rank1Red, rank1Green, rank1Blue))
rank1Total = rank1Total.astype(int)
j = j + 1
plt.imshow(rank1Total)
plt.show()