cat > /workspace/scratch/backfur.py <<'PY'
import cv2,numpy as np,json,tifffile
from scipy import ndimage as ndi
from PIL import Image
s='HH-8248';ox,oy=json.load(open('/workspace/scratch/detailboxes.json'))[s][:2];p='/workspace/scratch/finalmasks/'+s+'.png';old=cv2.imread(p,0)
poly=[[264,70],[301,69],[420,72],[532,76],[644,80],[705,83],[718,92],[726,112],[730,175],[733,246],[736,330],[740,370],[747,484],[260,484],[222,474],[227,398],[235,309],[242,226],[249,143],[255,95]]
m=np.zeros(old.shape,'uint8');cv2.fillPoly(m,[np.array(poly,'int32')+[ox,oy]],1)
fg=ndi.distance_transform_edt(m)>8;bg=ndi.distance_transform_edt(1-m)>10
_,fi=ndi.distance_transform_edt(~fg,return_indices=True);_,bi=ndi.distance_transform_edt(~bg,return_indices=True)
a=tifffile.imread('/workspace/input/photos/'+s+'.tif').astype('float32')/65535
smooth=cv2.GaussianBlur(a,(3,3),.7);F=smooth[fi[0],fi[1]];B=smooth[bi[0],bi[1]];D=F-B
al=np.clip(((a-B)*D).sum(2)/((D*D).sum(2)+1e-5),0,1);al[fg]=1;al[bg]=0;al[al<.03]=0
old[:oy+357]=np.rint(al[:oy+357]*255).astype('uint8');cv2.imwrite(p,old)
im=Image.open('/workspace/input/photos/'+s+'.tif');o=Image.new('RGB',im.size,(15,92,138));o.paste(im,(0,0),Image.fromarray(old));o.crop(json.load(open('/workspace/scratch/detailboxes.json'))[s]).save('/workspace/scratch/check_'+s+'.png')
PY
OPENBLAS_NUM_THREADS=1 python /workspace/scratch/backfur.py