目录
- 给出过约束线性系统解的推导 1
- 给出 的解的数学解释 3 3.染色算法的评估 3 3.1 实现原理 3 3.2 染色结果 4 失败的涂鸦与染色效果 5 3.3 算法的其他测试 10 3.4 优缺点总结 12 方法优点在于只要涂鸦细致合理,就能够渲染出比较好的彩色结果。而且方法的过程比较简单,就是解 一个线性系统,只要理解了模型的数学推导,整个思路就会比较清晰。并且除了染色之外,这个方法还 能适用于换色、语义分割等其他应用。 这个方法的缺点在于标记图片仍然比较复杂,尤其是色彩细致、结构复杂的图片,需要仔细的选取合适 的颜色并把边界画好才能得到比较好的结果。这是因为方法建立在相邻像素的颜色和灰度都相似的理论 基础上,所以如果邻域内是边界或色彩变化鲜明的话,就需要人工在这个地方着色。 从以上三张图可以看出边界处的涂鸦至关重要,图2中左侧的树和天空的交界处,由于没有给天空涂上蓝 色的边界,导致天空变成了绿色,路灯也因为这个原因变成了红色。而两种树的绿色因为边界处有涂 鸦,深绿色和浅绿色表现得就比较好。 从图3可以看出这个算法只能对某一片区域染上固定的颜色,虽然图3中的涂鸦已经非常仔细,笔触也很 多,但是饮料中的混杂色和渐变色在结果中并不能很好的表现出来,而胳膊、手、桌面的染色效果非常 好,与原图几乎没有差别。 涂鸦的数量对结果也有一定影响,但是不如边界处的涂鸦效果明显。如图1中涂鸦的数量不多,结果虽然 也不错,但是整体看来色彩不够明显(也与图像本身色调偏白有关)。 下图中只有很少的涂鸦,也可以得到基本正常的结果,但杯子的边界处因为没有涂鸦,所以导致有些洇 色。
import cv2
import numpy as np
import matplotlib.pyplot as plt
# Read image to RGB format.
def read_image(path):
img = cv2.imread(path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #bmp->bgr format
return img
def save_image(img, path):
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) #save as bmp,so need bgr format
cv2.imwrite(path, img)
def show_image(img, figsize=(10, 10), gray=False):
plt.figure(figsize=figsize)
if gray:
plt.imshow(img, cmap='gray')
else:
plt.imshow(img)
plt.show()
def rgb_to_yuv(rgb0):
rgb = rgb0 / 255.0
y = np.clip(np.dot(rgb, np.array([0.299, 0.587, 0.144])), 0, 1)
i = np.clip(np.dot(rgb, np.array([0.595716, -0.274453, -0.321263])), -0.5957, 0.5957)
q = np.clip(np.dot(rgb, np.array([0.211456, -0.522591, 0.311135])), -0.5226, 0.5226)
yiq = rgb
yiq[..., 0] = y
yiq[..., 1] = i
yiq[..., 2] = q
return yiq
def yuv_to_rgb(yuv):
yiq = yuv.copy()
r = np.dot(yiq, np.array([1.0, 0.956295719758948, 0.621024416465261]))
g = np.dot(yiq, np.array([1.0, -0.272122099318510, -0.647380596825695]))
b = np.dot(yiq, np.array([1.0, -1.106989016736491, 1.704614998364648]))
rgb = yiq
rgb[:, :, 0] = r
rgb[:, :, 1] = g
rgb[:, :, 2] = b
return np.clip(rgb, 0.0, 1.0) * 255.0
本文转载自: https://blog.csdn.net/sheziqiong/article/details/126985020
版权归原作者 biyezuopin 所有, 如有侵权,请联系我们删除。
版权归原作者 biyezuopin 所有, 如有侵权,请联系我们删除。