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)
07-18
7141
08-28
3189