假設(height, width, channels)
標準圖像陣列組織,則可以使用直接開箱即可使用矩陣乘法。
from skimage.data import lena # Color image version of lena. If you don't have skimage, use any image
import matplotlib.pyplot as plt
img = lena().astype(float)/256.
plt.figure()
plt.subplot(1, 2, 1)
plt.imshow(img)
sepia_filter = np.array([[.393, .769, .189],
[.349, .686, .168],
[.272, .534, .131]])
# here goes the filtering
sepia_img = img.dot(sepia_filter.T)
# Unfortunately your filter lines do not have unit sum, so we need to rescale
sepia_img /= sepia_img.max()
plt.subplot(1, 2, 2)
plt.imshow(sepia_img)
plt.show()
我想調用img.dot()在'1.6.1'對我不起作用,因爲數組的大小不同(至少在numpy的1.6.1和0.9.0 SciPy的) – bornruffians
工程。此代碼是複製+可粘貼的。嘗試一下!矩陣不必具有相同的大小以便可以多樣化。有必要的是,有*兩個相應的軸*,第一個矩陣中的一個,第二個中的一個。這裏就是這種情況:'img'的最後一個(color-)軸的長度爲3,'sepia_filter.T'的軸0也是。我可以直接使用'numpy.dot',開箱即用,因爲它使用第一個數組中的最後一個軸和第二個數組中的倒數第二個軸,這些都是我需要的。如果需要不同的或幾個,可以使用'np.tensordot' – eickenberg
我得到這個錯誤「ValueError:矩陣不對齊」在該行。可能是因爲我使用的是該圖像的黑白版本,而不是skimage的版本? – bornruffians