cat > /workspace/scratch/fellfinal.py <<'PY'
import cv2,numpy as np,json,tifffile
from PIL import Image
from scipy import ndimage as ndi
s='HH-8285';p='/workspace/scratch/finalmasks/'+s+'.png';old=cv2.imread(p,0);m=old>127;ox,oy=json.load(open('/workspace/scratch/detailboxes.json'))[s][:2]
a=(tifffile.imread('/workspace/input/photos/'+s+'.tif').astype('float32')/65535)**2.2
fg=ndi.distance_transform_edt(m)>15;bg=ndi.distance_transform_edt(~m)>13
_,fi=ndi.distance_transform_edt(~fg,return_indices=True);_,bi=ndi.distance_transform_edt(~bg,return_indices=True)
F=cv2.GaussianBlur(a,(5,5),1)[fi[0],fi[1]];B=cv2.GaussianBlur(a,(7,7),2)[bi[0],bi[1]];D=F-B
al=np.clip(((a-B)*D).sum(2)/((D*D).sum(2)+1e-6),0,1);al[fg]=1;al[bg]=0;al[al<.055]=0
old[:oy+400]=np.minimum(old[:oy+400],np.rint(al[:oy+400]*255).astype('uint8'))
cv2.imwrite('/workspace/scratch/fell_proposed.png',old)
x0,y0,x1,y1=json.load(open('/workspace/scratch/assetmeta.json'))[s]['crop'];im=Image.open('/workspace/output/assets/'+s+'.png').convert('RGB');o=Image.new('RGB',im.size,(220,225,230));o.paste(im,(0,0),Image.fromarray(old[y0:y1,x0:x1]));o.resize((500,555)).save('/workspace/scratch/fell_proof.png')
PY
OPENBLAS_NUM_THREADS=1 python /workspace/scratch/fellfinal.py