【发布时间】:2019-03-16 23:08:45
【问题描述】:
嗯,我正在使用图像处理来识别图像的颜色变化,并能够在直方图中绘制该数据。为此,我使用 RGB 颜色空间中的皮肤斑点图像。下面的代码我可以获取每个像素的颜色并使用 color.rgb2lab 转换为 HSV。但是由于我想转换为L*a*b*,因为它更接近人类视觉,所以在python库中没有转换为L*a*b*。有了这个,通过RGB的分离像素,我如何将这些像素转换成LAB颜色?
import numpy as np
import mpl_toolkits.mplot3d.axes3d as p3
import matplotlib.pyplot as plt
import colorsys
from PIL import Image
# (1) Import the file to be analyzed!
img_file = Image.open("IMD006.png")
img = img_file.load()
# (2) Get image width & height in pixels
[xs, ys] = img_file.size
max_intensity = 100
hues = {}
# (3) Examine each pixel in the image file
for x in xrange(0, xs):
for y in xrange(0, ys):
# (4) Get the RGB color of the pixel
[r, g, b] = img[x, y]
# (5) Normalize pixel color values
r /= 255.0
g /= 255.0
b /= 255.0
# (6) Convert RGB color to HSV
[h, s, v] = colorsys.rgb_to_hsv(r, g, b)
# (7) Marginalize s; count how many pixels have matching (h, v)
if h not in hues:
hues[h] = {}
if v not in hues[h]:
hues[h][v] = 1
else:
if hues[h][v] < max_intensity:
hues[h][v] += 1
【问题讨论】:
-
如果我没记错的话,您需要进行两部分转换,首先转换为 XYZ,然后转换为 LAB。您必须为 XYZ 转换选择一个色彩空间
-
您可以使用这些模块进行 RGB 到 L*A*B 的转换:skimage scikit-image.org/docs/0.14.x/api/skimage.color.html#rgb2lab 或 opencv docs.opencv.org/3.4.3/d7/d1b/…
-
Poynton's Color FAQ 是关于如何从一种色彩空间转换到另一种色彩空间的最佳资源。它只会为您提供方程式,如果您在任何库中都找不到它们,则必须自己实现。
-
OpenCV 确实转换为 L*a*b*:docs.opencv.org/3.4/de/d25/imgproc_color_conversions.html
-
阅读 @Cris 指出的颜色常见问题解答。它会帮助你专注于你的问题。 (L*a*b 仅在 §35 中提及,但请帮自己一个忙,从顶部开始。)
标签: python image image-processing pixel