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)
论文《Elimination of Marine Snow Effect from Underwater Image - An Adaptive Probabilistic Approach》复现
最新推荐文章于 2025-12-16 10:44:31 发布
该博客主要介绍了图像处理中的滑动窗口技术,用于分割图像并进行局部分析。同时,它涉及到了图像的放大、中值滤波以及基于像素强度的阈值处理,旨在识别和增强高亮度区域。算法还包括了计算像素统计和优化过程,以改进图像质量。
7996

被折叠的 条评论
为什么被折叠?



