基于Python实现染色算法的评估

目录

  1. 给出过约束线性系统解的推导 1
  2. 给出 的解的数学解释 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



基于Python实现染色算法的评估_第1张图片
基于Python实现染色算法的评估_第2张图片

基于Python实现染色算法的评估_第3张图片
基于Python实现染色算法的评估_第4张图片

基于Python实现染色算法的评估_第5张图片

基于Python实现染色算法的评估_第6张图片
基于Python实现染色算法的评估_第7张图片
基于Python实现染色算法的评估_第8张图片

基于Python实现染色算法的评估_第9张图片
基于Python实现染色算法的评估_第10张图片
基于Python实现染色算法的评估_第11张图片
基于Python实现染色算法的评估_第12张图片
基于Python实现染色算法的评估_第13张图片
基于Python实现染色算法的评估_第14张图片

你可能感兴趣的:(python,算法,计算机视觉,染色算法评估,课程设计)