基于深度学习的图像的风格迁移创新实训5

上周完成的代码在一些图片上的效果相当好,比如:

基于深度学习的图像的风格迁移创新实训5_第1张图片基于深度学习的图像的风格迁移创新实训5_第2张图片

但由于天空分割算法有一些简单和局限,因此出现了一些分割的不好的情况,比如:基于深度学习的图像的风格迁移创新实训5_第3张图片基于深度学习的图像的风格迁移创新实训5_第4张图片

因此,我觉得有必要在得到mask之后就进行一次判断,判断该mask是否过于参差不齐,也就是每一列最纵深的一个像素行程的序列的跳跃程度不能太大。当然,这种跳跃的高度和出现跳跃现象的次数,都要和原图的宽和高进行对比,得到的比率才是一个衡量标准。我衡量了十几张处理不好的图片,用gap_rate和gap_length_rate两个指标来衡量一张mask的好坏。核心代码如下:

last = maxd[0]
limit = rows//100
res = 0
number = 0

for k in range(1,cols):
    cur = maxd[k]
    if(abs(cur-last)>limit):
        res += 1
        number += abs(cur-last)
        for r in range(0,rows):
            mask[r,k] = 127
    last = cur

gap_rate = res/cols
gap_length_rate = number/rows
print("vertical line:"+str(res))
print("gap rate:"+str(gap_rate))
print("gap length rate:"+str(gap_length_rate))
#0.035
#0.55

if(gap_rate>=0.035 or gap_length_rate >= 0.55):
    show = np.zeros(ori.shape,np.uint8)
    for i in range(0,rows) :
        for j in range(0,cols) :
            for k in range(0,3):
                show[i,j,k] = ori[i,j,k]
else :
    show = np.zeros(ori.shape,np.uint8)
    for i in range(0,rows) :
        for j in range(0,cols) :
            if mask[i,j]== 255 or i20):
                        differ+=1
                if(differ==3):
                    for k in range(0,3):
                        A = (int)(show[i,j,k])
                        B = (int)(show[i,j-1,k])
                        newval = (A+B)//2
                        show[i,j,k] = (np.uint8)(newval)
                    if(i
这样,在遇到过于参差不齐的mask分割面之后,算法会检测到异常的gap_rate或者gap_length_rate,然后不对图像进行后处理,而是直接返回深度模型的处理结果,从而避免了返回有问题的图片。

你可能感兴趣的:(风格迁移)