[LAB 15 · 语言指代小练习:目标、参照与关系](/course/notebooks/7dc83786d067465aa76264475db2c62d.html) # 2. 同一个底图上做干预 · 实现代码 [独立阅读](/course/notebook-blocks/bbf14f2650fc44e3ad84f34d49cdb8ff.html) 按问题继续 RGB规则提框、错误关键词基线、目标/参照/关系与干预 展开完整实现代码 ``` def scene(): img=Image.new('RGB',(160,96),(245,243,236));d=ImageDraw.Draw(img) def cup(x,color): d.rounded_rectangle((x+18,31,x+34,52),radius=7,outline=color,width=5) d.rectangle((x,24,x+25,57),fill=color) d.ellipse((x,19,x+25,29),fill=color) cup(15,PALETTE['red']);cup(109,PALETTE['blue']) d.rectangle((60,65,89,79),fill=PALETTE['brown']) return np.array(img) base=scene();occluded=base.copy();occlusion_mask=np.zeros(base.shape[:2],bool);occlusion_mask[16:62,11:53]=True occluded[occlusion_mask]=(115,118,123) swapped=base.copy();redmask=np.all(base==PALETTE['red'],axis=-1);bluemask=np.all(base==PALETTE['blue'],axis=-1) swapped[redmask]=PALETTE['blue'];swapped[bluemask]=PALETTE['red'] assert np.array_equal(base[~occlusion_mask],occluded[~occlusion_mask]) assert np.array_equal(base[~(redmask|bluemask)],swapped[~(redmask|bluemask)]) for label,arr in [('base',base),('target-occluded',occluded),('colors-exchanged',swapped)]:Image.fromarray(arr).save(OUT/('lab15-'+label+'.png')) ```