自实现随机遮挡,图像增强

这几天在学习对抗样本,想实现对图片的随机遮挡,但是网上搜到的代码都是遮挡一块区域的,不是很满意,就自己写了一个,这个实现比较简陋,还有很大的改进空间,两个循环都可以用别的方法代替来加速。

img为Image的图片输入

raito为遮挡的多少,例如0.5就是遮挡一般

part_h和part_w为遮挡块的大小

import random
from PIL import Image
import numpy as np
def occlusion(img,raito=0.5,part_h=10,part_w=10):

    img=np.array(img)

    h=img.shape[0]
    w=img.shape[1]
    
    num_h=int(h/part_h)
    num_w=int(w/part_w)

    indexs=[]
    for x in range(num_h+1):
        for y in range(num_w+1):
            indexs.append([x,y])
    random.shuffle(indexs)
    # print(int(len(indexs)*raito))
    indexs=indexs[:int(len(indexs)*raito)]
    # print(len(indexs))

    for x,y in indexs:
        img[part_h*x:part_h*(x+1),part_w*y:part_w*(y+1),:]=0
    
    img=Image.fromarray(img)
    return img
img=Image.open('./data/10/test/0/1.jpg')
img=occlusion(img)
img.save('./data/10/test/0/0.jpg')

原图:

效果图

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>