局部模糊的类模糊图的区分算法尝试

局部模糊的类模糊图的区分算法尝试

缘由

在做一个深度学习的课题,打算做一个自动化采集数据集的自动化设备,运动设备与相机采集曝光频率往往对不上,偶尔会出现卡吨、延迟现象,所以做了一个简易的针对性强的自动筛选的python程序。主要用的是拉斯锐度检测的手段。

主要思路

由于移动的时候,样品变动的位子是局部变动,如果出现模糊,并非式整张图片都是模糊的。而且拉斯变换fm_src= variance_of_laplacian(ROI),这个语句选取的是整张图的数据,所以如果局部出现模糊,可能会由于其他地方清晰而把整个值给拉高。
所以我将800x800的图片分成了256个100x100的图片(100x100最少应该是8x8,64张图才对,因为有些图截取ROI是,会截取到半张或者小部分,这样拉斯变化出来的锐度图值会很小,与模糊的图片出现相似的值,容易出错。所以我用了一个标准差来进行判断,因为我检测的样品,部分位置是空的,用个标准差去判断,可以减少很多计算时间。)
最后的判断指标我使用了拉斯模糊3X3的mask去做,再与原始图的锐度值去做对比,为什么直接用锐度指标判断,因为我的样品品的测试表面主要是一种梯度平稳渐变的图形,他的表面斜度使得跟模糊的趋势一直,所以针对这类样品,我发现他们之间相除存在一定规律,经过拉斯平滑后与未经过拉斯平滑后相除小于0.07的为模糊图片。
下面是我的具体算法:

path_name='/home/zc/Desktop/PASSIVE'
out_path='/home/zc/Desktop/PASSIVE_CLEAR'
image_list = os.listdir(path_name)
list.sort(image_list)
blur_list=[]
part_num=14   #分成了多少个小图像来检测
for name in image_list:  
    img=cv2.imread(path_name+'/'+name)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    flag_blur=0    #是否存在模糊图像的标志
    #print(name) 
    for part_x in range(part_num):    #给了一个容错误差,小图片存在两个及两个以上才判断为模糊图片
        if flag_blur==2: 
            break
        for part_y in range(part_num):
            
            ROI = np.ones((100, 100, 1))
            ROI=gray[part_x*50:(part_x)*50+100,part_y*50:(part_y)*50+100]
            pixel_ave=cv2.meanStdDev(ROI)[0][0]   #方差,均值
            pixel_num=0
            pixel_MSE=cv2.meanStdDev(ROI)[1][0]   
            #if pixel_MSE<20:continue             #两种判断手段,一种用方差,另外一个种用大于平均数的像素点
            
            for i in range(len(ROI)):
                for j in range(len(ROI)):
                    if ROI[i][j]>pixel_ave+10:      
                        
                        pixel_num+=1
                   # else :ROI[i][j]=pixel_ave
            blur_image=cv2.GaussianBlur(ROI,(3,3),0)         #拉斯平滑  
            #blur_image_1=cv2.blur(ROI,(3,3),0)           
            #fil_para=32
            #blur_image_2=cv2.bilateralFilter(ROI,fil_para,fil_para/2,fil_para*2)
            if pixel_num>2000:
                fm_src= variance_of_laplacian(ROI)
                fm_blur= variance_of_laplacian(blur_image)
                #fm_blur_1= variance_of_laplacian(blur_image_1)
                #fm_blur_2= variance_of_laplacian(blur_image_2)
        #if fm<35:
        #blur_list.append(name)
                #score=(math.sqrt(fm_src))/fm_blur
                #score=fm_blur/fm_blur_1
                #print(name,part_x,part_y,' value is',fm_src,fm_blur,fm_blur_1,fm_blur_2)
                #print(name,part_x,part_y,' value is',fm_src,fm_blur/fm_src,fm_blur_1/fm_src,fm_blur_2/fm_src,fm_blur_2/fm_blur)
                print(fm_blur/fm_src,fm_src)
                if fm_src>20 and fm_blur/fm_src<0.07:        #存在一定比值规律
                    flag_blur+=1
                    #cv2.imwrite('/home/zc/Desktop/blur_test/'+str(part_x)+str(part_y)+'.bmp',ROI)
                    #cv2.imwrite('/home/zc/Desktop/blur_test/'+str(part_x)+str(part_y)+'bbbbb.bmp',blur_image_2)
                    break
         #   if part_y==7:break
        #if part_x==7:break
        #    break
       # break
    if flag_blur<2:
        blur_list.append(name)
for name in blur_list:
    shutil.copy(path_name+'/'+name,out_path)

图片底端存在模糊现象
图1 底端存在模糊现象

参考

https://blog.csdn.net/jacke121/article/details/80574451

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值