Как построить 3d графику со значениями каждого пикселя изображения? - PullRequest
0 голосов
/ 12 октября 2018

Я конвертирую цвета изображения в LAB следующим образом:

import cv2
imbgr=cv2.imread('photo.jpg')
imlab=cv2.cvtColor(imbgr,cv2.COLOR_BGR2LAB)
cv2.imwrite('lab.jpg',imlab)

возвращает пиксели с помощью imlab [x, y], как построить график с этими значениями?

1 Ответ

0 голосов
/ 15 октября 2018

Вот несколько примеров того, как показывать изображения и графические данные в виде трехмерных данных.

На первом и втором рисунках показано исходное изображение BGR и его отдельные каналы в виде BGR, а затем в виде LAB.

На третьей и четвертой фигурах показана контурная карта и график поверхности с использованием первых каналов изображения LAB в качестве трехмерных данных.

В сторону: обратите внимание, что imshow () требуется RGBобраз.И, при желании, контурный график можно сделать квадратным, используя ключевое слово aspect, aspect = 'equal' или set_aspect ().

import cv2
import numpy as np

import matplotlib.image as mpimg

import matplotlib.pyplot as plt

# for the surface map
from mpl_toolkits.mplot3d import Axes3D

imbgr = cv2.imread('Mona_Lisa.jpg')

imrgb = cv2.cvtColor(imbgr, cv2.COLOR_BGR2RGB)

imlab=cv2.cvtColor(imbgr,cv2.COLOR_BGR2LAB)

# Show the original image and individual color channels
plt.figure(0)
plt.subplot(2,2,1)

plt.imshow( imrgb )

plt.subplot(2,2,2)
plt.imshow(imbgr[:,:,0], cmap='Blues')

plt.subplot(2,2,3)
plt.imshow(imbgr[:,:,1], cmap='Greens')

plt.subplot(2,2,4)
plt.imshow(imbgr[:,:,2], cmap='Reds')

plt.show()

# show the LAB space iamge
plt.figure(1)
plt.subplot(2,2,1)

plt.imshow( imrgb )

plt.subplot(2,2,2)
plt.imshow(imlab[:,:,0], cmap='Greys')

plt.subplot(2,2,3)
plt.imshow(imbgr[:,:,1], cmap='cool')

plt.subplot(2,2,4)
plt.imshow(imbgr[:,:,2], cmap='cool')

plt.show()

# contour map
plt.figure(2)

y = range( imlab.shape[0] )
x = range( imlab.shape[1] ) 
X, Y = np.meshgrid(x, y)

plt.contour( X, Y, imlab[:,:,0], 50 )

plt.show()

# surface map
plt.figure(3)

ax = plt.axes(projection='3d')

y = range( imlab.shape[0] )
x = range( imlab.shape[1] ) 
X, Y = np.meshgrid(x, y)

ax.plot_surface( X, Y, imlab[:,:,0] )

plt.show()

А вот изображения, сгенерированные кодом, как указано.

Рисунок (0) - исходное изображение и отдельные цветовые каналы

enter image description here

Рисунок (1) - изображение LAB и отдельные каналы

enter image description here

Рисунок (2) - контурный график первогоКанал LAB

enter image description here

Рисунок (3) - график поверхности первого канала LAB

enter image description here

...