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

本文针对天空分割算法在某些图片上产生的参差不齐的问题,提出了一种基于gap_rate和gap_length_rate的评估方法,并通过一系列阈值判断决定是否对图像进行后处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

但由于天空分割算法有一些简单和局限,因此出现了一些分割的不好的情况,比如:

因此,我觉得有必要在得到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 i<maxdepth[j]:
                differ = 0
                for k in range(0,3):
                    dis = maxdepth[j] - i
                    if dis<24:
                        a = 32 - dis
                        plus = 8*dis-1
                        show[i,j,k] = ori[i,j,k]*a//32 + plus
                    else:
                        show[i,j,k] = ori[i,j,k]//4 + 191

                    A = (int)(show[i,j,k])
                    B = (int)(show[i,j-1,k])
                    if(abs(A-B)>20):
                        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<maxdepth[j]-35):
                        show[i, j, k] = ori[i, j, k]//4 + 191
                    elif(i<maxdepth[j]-20):
                        show[i,j,k] = ori[i,j,k]//3 + 169
                    elif(i<maxdepth[j]-25):
                        show[i,j,k] = ori[i,j,k]//2 + 127
                    elif(i<maxdepth[j]-20):
                        show[i,j,k] = ori[i,j,k]*2//3 + 84
                    elif(i<maxdepth[j]-15):
                        show[i,j,k] = ori[i,j,k]*3//4 + 63
                    elif(i<maxdepth[j]-7):
                        show[i,j,k] = ori[i,j,k]*7//8 + 31
                    elif(i<maxdepth[j]-5):
                        show[i,j,k] = ori[i,j,k]*15//16 + 15
                    else:
                        show[i,j,k] = ori[i,j,k]*31//32 + 7
            else:
                for k in range(0,3):
                    show[i,j,k] = ori[i,j,k]
这样,在遇到过于参差不齐的mask分割面之后,算法会检测到异常的gap_rate或者gap_length_rate,然后不对图像进行后处理,而是直接返回深度模型的处理结果,从而避免了返回有问题的图片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值