{"version":2,"relationshipURLBase":"https://codingai-lec03.pages.dev/course/notebook-blocks/a938e2aaafcf413d96db608c3cb1cfbc.html","relationshipResolution":"Resolve relative relationship URLs against relationshipURLBase; complete records and absolute URLs are in blocks.","title":"一个点为什么不总能确定一个对象 · 实现代码","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/a938e2aaafcf413d96db608c3cb1cfbc.html","markdown":"https://codingai-lec03.pages.dev/course/notebook-blocks/a938e2aaafcf413d96db608c3cb1cfbc.md","pages":[{"id":"reading-opening","title":"一个点为什么不总能确定一个对象 · 实现代码","unit":"一个点为什么不总能确定一个对象 · 实现代码","unitId":"notebook-blocks/a938e2aaafcf413d96db608c3cb1cfbc","chapter":"course","number":1}],"aliases":[{"oldId":"b-ce4b999f0e9505e456e19e5d","targetId":"b-ce4b999f0e9505e456e19e5d","page":"reading-opening","operation":"move","beforeSHA256":"4a70a668647e26b438ffc11a81449d410ffe6b9085615b579e44bb6e24f65e28","afterSHA256":"4a70a668647e26b438ffc11a81449d410ffe6b9085615b579e44bb6e24f65e28","reason":"Same source body in authored semantic page"},{"oldId":"b-7d5848ce5cc69b67935fea17","targetId":"b-7d5848ce5cc69b67935fea17","page":"reading-opening","operation":"move","beforeSHA256":"4300b6099612ecce8ca08a4ff0a1161f8bda609c5c5bb33c2b2dfda3ffe0b9ea","afterSHA256":"4300b6099612ecce8ca08a4ff0a1161f8bda609c5c5bb33c2b2dfda3ffe0b9ea","reason":"Same source body in authored semantic page"},{"oldId":"b-b6f556287fae27afbef61904","targetId":"b-b6f556287fae27afbef61904","page":"reading-opening","operation":"move","beforeSHA256":"e91f24e4e4ca40e2099a0d81d30db6568f4bf2074b499eeee6e3959617bd97ac","afterSHA256":"e91f24e4e4ca40e2099a0d81d30db6568f4bf2074b499eeee6e3959617bd97ac","reason":"Same source body in authored semantic page"},{"oldId":"b-abf9634012cad837e1878bc6","targetId":"b-abf9634012cad837e1878bc6","page":"reading-opening","operation":"move","beforeSHA256":"7d1e7531a3ac0397d25516d56db48a938b043ef98467022f8eacc41563e73771","afterSHA256":"7d1e7531a3ac0397d25516d56db48a938b043ef98467022f8eacc41563e73771","reason":"Same source body in authored semantic page"},{"oldId":"b-50a423507c4252c1e23e1629","targetId":"b-50a423507c4252c1e23e1629","page":"reading-opening","operation":"move","beforeSHA256":"6fb55df2c89b57fe0a5c8c218d7358df3d91b182ca0d7b2efb317cd0e5f3c18d","afterSHA256":"6fb55df2c89b57fe0a5c8c218d7358df3d91b182ca0d7b2efb317cd0e5f3c18d","reason":"Same source body in authored semantic page"}],"blocks":[{"id":"b-ce4b999f0e9505e456e19e5d","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/a938e2aaafcf413d96db608c3cb1cfbc.html#b-ce4b999f0e9505e456e19e5d","content":"[LAB 16 · 点、框与负提示：分割规则基线](/course/notebooks/d83defa954034769a1ee94e3ea48640a.html)","sha256":"4a70a668647e26b438ffc11a81449d410ffe6b9085615b579e44bb6e24f65e28","chapter":{"id":"course","title":"一个点为什么不总能确定一个对象 · 实现代码"},"unit":{"id":"notebook-blocks/a938e2aaafcf413d96db608c3cb1cfbc","title":"一个点为什么不总能确定一个对象 · 实现代码"},"page":{"id":"reading-opening","title":"一个点为什么不总能确定一个对象 · 实现代码","number":1},"sectionTitle":"一个点为什么不总能确定一个对象 · 实现代码","currentQuestion":"一个点为什么不总能确定一个对象 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":null,"nextBlock":"b-7d5848ce5cc69b67935fea17","prerequisites":[],"relatedBlocks":[]},{"id":"b-7d5848ce5cc69b67935fea17","type":"h1","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/a938e2aaafcf413d96db608c3cb1cfbc.html#b-7d5848ce5cc69b67935fea17","content":"# 一个点为什么不总能确定一个对象 · 实现代码","sha256":"4300b6099612ecce8ca08a4ff0a1161f8bda609c5c5bb33c2b2dfda3ffe0b9ea","chapter":{"id":"course","title":"一个点为什么不总能确定一个对象 · 实现代码"},"unit":{"id":"notebook-blocks/a938e2aaafcf413d96db608c3cb1cfbc","title":"一个点为什么不总能确定一个对象 · 实现代码"},"page":{"id":"reading-opening","title":"一个点为什么不总能确定一个对象 · 实现代码","number":1},"sectionTitle":"一个点为什么不总能确定一个对象 · 实现代码","currentQuestion":"一个点为什么不总能确定一个对象 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-ce4b999f0e9505e456e19e5d","nextBlock":"b-b6f556287fae27afbef61904","prerequisites":[{"id":"b-ce4b999f0e9505e456e19e5d","url":"#b-ce4b999f0e9505e456e19e5d","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-b6f556287fae27afbef61904","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/a938e2aaafcf413d96db608c3cb1cfbc.html#b-b6f556287fae27afbef61904","content":"按问题继续","sha256":"e91f24e4e4ca40e2099a0d81d30db6568f4bf2074b499eeee6e3959617bd97ac","chapter":{"id":"course","title":"一个点为什么不总能确定一个对象 · 实现代码"},"unit":{"id":"notebook-blocks/a938e2aaafcf413d96db608c3cb1cfbc","title":"一个点为什么不总能确定一个对象 · 实现代码"},"page":{"id":"reading-opening","title":"一个点为什么不总能确定一个对象 · 实现代码","number":1},"sectionTitle":"一个点为什么不总能确定一个对象 · 实现代码","currentQuestion":"一个点为什么不总能确定一个对象 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-7d5848ce5cc69b67935fea17","nextBlock":"b-abf9634012cad837e1878bc6","prerequisites":[{"id":"b-7d5848ce5cc69b67935fea17","url":"#b-7d5848ce5cc69b67935fea17","role":"section-title"},{"id":"b-ce4b999f0e9505e456e19e5d","url":"#b-ce4b999f0e9505e456e19e5d","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-abf9634012cad837e1878bc6","type":"p","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/a938e2aaafcf413d96db608c3cb1cfbc.html#b-abf9634012cad837e1878bc6","content":"像素连通域、正负点/框提示、局部/整体多义性","sha256":"7d1e7531a3ac0397d25516d56db48a938b043ef98467022f8eacc41563e73771","chapter":{"id":"course","title":"一个点为什么不总能确定一个对象 · 实现代码"},"unit":{"id":"notebook-blocks/a938e2aaafcf413d96db608c3cb1cfbc","title":"一个点为什么不总能确定一个对象 · 实现代码"},"page":{"id":"reading-opening","title":"一个点为什么不总能确定一个对象 · 实现代码","number":1},"sectionTitle":"一个点为什么不总能确定一个对象 · 实现代码","currentQuestion":"一个点为什么不总能确定一个对象 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-b6f556287fae27afbef61904","nextBlock":"b-50a423507c4252c1e23e1629","prerequisites":[{"id":"b-7d5848ce5cc69b67935fea17","url":"#b-7d5848ce5cc69b67935fea17","role":"section-title"},{"id":"b-ce4b999f0e9505e456e19e5d","url":"#b-ce4b999f0e9505e456e19e5d","role":"problem-context"}],"relatedBlocks":[]},{"id":"b-50a423507c4252c1e23e1629","type":"pre","scope":"document","url":"https://codingai-lec03.pages.dev/course/notebook-blocks/a938e2aaafcf413d96db608c3cb1cfbc.html#b-50a423507c4252c1e23e1629","content":"```\n# Writable ephemeral workspace for detached readonly cloud runs.\nimport os, tempfile\nos.chdir(tempfile.mkdtemp(prefix='lec03_lab16_'))\n\nimport numpy as np\nfrom pathlib import Path\nimport matplotlib; matplotlib.use('Agg')\nimport matplotlib.pyplot as plt\nout=Path('lab16-results'); out.mkdir(exist_ok=True)\nimage=np.full((48,64,3),.94); image[8:39,7:34]=[.8,.18,.15]\nimage[18:29,17:27]=[.48,.10,.08]; image[13:37,43:57]=[.12,.25,.8]\ndef segment(image,positive,tolerance,negative=None,box=None):\n    x,y=positive; seed=image[y,x]; allowed=np.linalg.norm(image-seed,axis=-1)<tolerance\n    if negative is not None:\n        nx,ny=negative\n        allowed &= np.linalg.norm(image-image[ny,nx],axis=-1)>.15\n    if box is not None:\n        x0,y0,x1,y1=box; crop=np.zeros(allowed.shape,bool); crop[y0:y1,x0:x1]=True; allowed &= crop\n    result=np.zeros(allowed.shape,bool); stack=[(x,y)]\n    while stack:\n        x,y=stack.pop()\n        if not (0<=x<64 and 0<=y<48) or result[y,x] or not allowed[y,x]: continue\n        result[y,x]=True; stack.extend([(x-1,y),(x+1,y),(x,y-1),(x,y+1)])\n    return result\nconfigs=[('tight',.2,None,None),('loose',.5,None,None),('negative',.5,(10,10),None),('box',.5,None,(16,17,28,30))]\nmasks=[segment(image,(21,23),t,n,b) for _,t,n,b in configs]\nfig,axs=plt.subplots(1,5,figsize=(12,3)); axs[0].imshow(image); axs[0].plot(21,23,'g+'); axs[0].set_title('RGB + positive point')\nfor ax,(name,*_),mask in zip(axs[1:],configs,masks): ax.imshow(mask,vmin=0,vmax=1); ax.set_title(name+' area='+str(mask.sum()))\nfor ax in axs: ax.axis('off')\nfig.tight_layout(); fig.savefig(out/'lab16-prompts.png',dpi=150); plt.close(fig)\nassert masks[0].sum()==110 and masks[1].sum()==837\nprint({name:int(m.sum()) for (name,*_),m in zip(configs,masks)})\nprint('negative removes similar outer-shell pixels; box clips, neither proves learned object semantics')\n```","sha256":"6fb55df2c89b57fe0a5c8c218d7358df3d91b182ca0d7b2efb317cd0e5f3c18d","chapter":{"id":"course","title":"一个点为什么不总能确定一个对象 · 实现代码"},"unit":{"id":"notebook-blocks/a938e2aaafcf413d96db608c3cb1cfbc","title":"一个点为什么不总能确定一个对象 · 实现代码"},"page":{"id":"reading-opening","title":"一个点为什么不总能确定一个对象 · 实现代码","number":1},"sectionTitle":"一个点为什么不总能确定一个对象 · 实现代码","currentQuestion":"一个点为什么不总能确定一个对象 · 实现代码","sourceSlides":[],"knowledgeBlock":null,"formulas":[],"previousBlock":"b-abf9634012cad837e1878bc6","nextBlock":null,"prerequisites":[{"id":"b-7d5848ce5cc69b67935fea17","url":"#b-7d5848ce5cc69b67935fea17","role":"section-title"},{"id":"b-ce4b999f0e9505e456e19e5d","url":"#b-ce4b999f0e9505e456e19e5d","role":"problem-context"}],"relatedBlocks":[]}]}
