论文《Elimination of Marine Snow Effect from Underwater Image - An Adaptive Probabilistic Approach》复现

该博客主要介绍了图像处理中的滑动窗口技术,用于分割图像并进行局部分析。同时,它涉及到了图像的放大、中值滤波以及基于像素强度的阈值处理,旨在识别和增强高亮度区域。算法还包括了计算像素统计和优化过程,以改进图像质量。
from locale import windows_locale
from operator import truediv
import os

import cv2
import natsort
import numpy as np
from skimage import morphology,draw,io
import skimage
import pandas as pd
from numba import jit
import time

def sliding(image, step_size, windows_size):
    for y in range(0,image.shape[0],step_size):
        for x in range(0,image.shape[1],step_size):
            if(y+windows_size<=image.shape[0] and x+windows_size<=image.shape[1]):

                yield(x,y,image[y:y+windows_size,x:x+windows_size])
    
def enlarge(image):
    h=image.shape[0]
    w=image.shape[1]
    hnew= h+2
    wnew= w+2
    I=np.zeros((hnew,wnew),dtype=np.uint8) 
    for k in range(hnew-2): 
        for j in range(wnew-2):
            I[k+1][j+1]=image[k][j]
    cv2.imwrite('D:/zs/code/xuanfuwu/apareproduction/result/55.jpg',I)
    return I
def findenlarge(image,center,windows_size,thres):
    sum=0
    imagenew = enlarge(image)
    xlrange=int(center[0]-(windows_size-1)/2)
    xrrange=int(center[0]+(windows_size-1)/2)
    ylrange=int(center[1]-(windows_size-1)/2)
    yrrange=int(center[1]+(windows_size-1)/2)

    for i in range(xlrange,xrrange):
        for j in range(ylrange,yrrange):
           
            if(imagenew[j][i]>thres):
                sum+=1


    return sum
def getmedian(image):

    # h = image.shape[0]
    # w= image.shape(1)

    # for k in range(h): 
    #     for j in range(w):
    mediasn= np.median(image)
    return mediasn



     


    



# @jit
def cal(image, step_size, windows_size):  

    img1 = sliding(image, step_size,windows_size) 
   

    i=0
   
    meandev=[]
    pmss=[]
    h=image.shape[0]
    w=image.shape[1]
    begin= time.time()



    slid_num=(h-windows_size+1)*(w-windows_size+1)
    while(i<slid_num):#滑动窗口个数25=
        im = next(img1)
        im2 = im[2]
        x_i= im[0]
        y_i=im[1]
        center= (x_i+windows_size/2, y_i+windows_size/2)
        x=im2.shape
        patch= x[0]
       
        
        i=i+1
        sum=0
        
        means, dev = cv2.meanStdDev(im2)
        means0=means[0][0]
        dev0=dev[0][0]
        thres= means0+dev0/2
        if(im2[int(windows_size/2)][int(windows_size/2)]>thres):#满足中心区域是高亮度区域
            for k in range(patch): 
                for j in range(patch):
                    if(im2[k][j]>thres):
                        sum+=1
            
            pms=sum/x[0]/x[0]
            pmss.append(pms)
            meandev.append([means0,dev0])
            meanpmss=np.mean(pmss)
            if(pms>meanpmss):
                window_size=9
                sumnew= findenlarge(image,center,window_size,thres)
                if(sumnew>sum):
                    del pmss[len(pmss)-1]
                    pmss.append(0.01)

                else:
                    mediasn=getmedian(im2)
                    image[int(center[1]),int(center[0])]=mediasn
                    # im2[int(windows_size/2)][int(windows_size/2)]=




            # cv2.imwrite('D:/zs/code/xuanfuwu/apareproduction/result/'+str(i)+'.jpg',im2)
    end= time.time()
    print(pmss)
    print(meandev)
            
    print(str(end-begin)+'       s')


    return meandev,pmss,image




if __name__ == "__main__":

  
    folder = r'D:\zs\code\xuanfuwu\apareproduction\image'
    
    files = os.listdir(folder)
    files = natsort.natsorted(files)
    

    # for j in range(len(files)):
    for j in range(2):
        file = files[j]
        prefix = file.split('.')[0]
        image1=folder+'/'+file
        rgb_image = cv2.imread(image1)
        # rgb_image = cv2.resize(rgb_image,(192,192))

        ycrcb_image = cv2.cvtColor(rgb_image, cv2.COLOR_RGB2YCR_CB)
        y,g,b = cv2.split(ycrcb_image)
        
        


        # back2src = cv2.merge([y,g,b])
        meandev,pmss,image=cal(y,1,7)
        merged = cv2.merge([image, g, b])
        rgb_image = cv2.cvtColor(merged, cv2.COLOR_YCR_CB2RGB)
        rgb_image= cv2.resize(rgb_image,(384,384))
      

        cv2.imwrite('D:/zs/code/xuanfuwu/apareproduction/result/'+prefix+'.jpg',rgb_image)
        
        

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值