图像差异检测技术:SSIM法与像素比对详解
鍢匡紝浣犳槸涓嶆槸涔熼亣鍒拌繃杩欑鎯呭喌鈥斺€斾袱寮犵湅浼肩浉鍚岀殑鍥剧墖鏀惧湪浣犻潰鍓嶏紝鐪肩潧閮界湅鑺变簡涔熸壘涓嶅嚭鍝噷涓嶅悓锛燄煠?鍒厡锛佷粖澶╁挶浠氨鏉ヨ亰鑱婇偅浜涜棌鍦ㄤ唬鐮侀噷鐨?鎵捐尙"绁炲櫒锛屽挨鍏舵槸SSIM娉曞拰鍍忕礌姣斿杩欏榛勯噾鎼。锛屼繚璇佽浣犵湅瀹岀洿鍛硷細"鍘熸潵杩樿兘杩欐牱鐜╋紒"
馃攳 涓€銆佷负浠€涔堟垜浠渶瑕?鎵捐尙"绁炲櫒锛?/h3>
鎯宠薄涓€涓嬶細浣犺璁′簡涓狝PP鍥炬爣锛岀▼搴忓憳灏忓摜璇?鎼炲畾鍟?锛岀粨鏋滀笂绾垮悗鐢ㄦ埛鍚愭Ы鍥炬爣杈圭紭鍙戣櫄... 涓€瀵规瘮鎵嶅彂鐜帮紝浠栧鍑虹殑鍥剧墖琚帇缂╀簡锛佽繖绉嶅満鏅笅锛屸€?strong>鈥嬭倝鐪兼瘮瀵规牴鏈潬涓嶄綇鈥?/strong>鈥嬶紝鑰屸€?strong>鈥嬬畻娉曡兘鎹曟崏浜虹溂蹇界暐鐨勭粏鑺傗€?/strong>鈥嬪樊寮傘€?/p>
鍐嶆瘮濡傚尰鐢熷姣旀偅鑰呮不鐤楀墠鍚庣殑CT褰卞儚锛?.5姣背鐨勭粨鑺傚彉鍖栧彲鑳藉氨鏄敓姝诲叧閿煉€鈥斺€旇繖鏃跺€欌€?strong>鈥嬪儚绱犵骇姣斿鈥?/strong>鈥嬪拰鈥?strong>鈥嬬粨鏋勫垎鏋愨€?/strong>鈥嬪氨鎴愪簡鏁戝懡鎶€鏈€?/p>
鈿旓笍 浜屻€佷紶缁熷儚绱燩K vs 鏅鸿兘SSIM
鈥?strong>鈥嬧枌 鍍忕礌姣斿锛氱洿鐢峰紡鎵捐尙鈥?/strong>鈥?/p>
python澶嶅埗# 绠€鍗曠矖鏆寸殑鍍忕礌瀵规瘮浠g爜绀轰緥 import cv2 img1 = cv2.imread('imageA.jpg') img2 = cv2.imread('imageB.jpg') diff = cv2.absdiff(img1, img2) # 鐩存帴璁$畻鍍忕礌缁濆鍊煎樊
鈥?strong>鈥嬩紭鐐光€?/strong>鈥嬶細
- 璁$畻閫熷害椋炲揩鈿★笍锛岄€傚悎瀹炴椂妫€娴?/li>
- 瀵归鑹插彉鍖栨瀬鍏舵晱鎰燂紝姣斿logo鑹插€煎亸宸?/li>
鈥?strong>鈥嬭嚧鍛戒激鈥?/strong>鈥嬶細
- 閬囧埌鍥剧墖骞崇Щ/鏃嬭浆鐩存帴缃㈠伐
- 鎶婅殏铓佸ぇ灏忕殑鍣偣褰撳ぇ璞℃姤閿欙紙璇鐜囬珮锛?/li>
- 瀹屽叏鐪嬩笉鎳傚唴瀹圭粨鏋勶紝灏卞儚鍙暟绗旂敾涓嶈瀛楃殑鏂囩洸
鈥?strong>鈥嬧枌 SSIM锛堢粨鏋勭浉浼兼€э級锛氭噦鑹烘湳鐨凙I渚︽帰鈥?/strong>鈥?br/> 瀹冧笉鍍忓儚绱犳瘮瀵归偅鏍锋鏉匡紝鑰屾槸妯′豢浜虹溂瑙傚療鈥?strong>鈥嬩寒搴︺€佸姣斿害銆佺粨鏋勨€?/strong>鈥嬩笁澶х淮搴︼細
璇勪及缁村害 | 璁$畻鍘熺悊 | 鏁堟灉璇存槑 |
---|---|---|
浜害 | 鍧囧€兼瘮瀵?渭鈧?vs 渭岬?/td> | 闃叉鏁翠綋杩囨洕/杩囨殫 |
瀵规瘮搴?/td> | 鏍囧噯宸姣?蟽鈧?vs 蟽岬?/td> | 鎹曟崏妯$硦/閿愬寲宸紓 |
缁撴瀯 | 鍗忔柟宸垎鏋?蟽鈧撫掸 | 璇嗗埆鐗╀綋褰㈠彉鎴栦綅绉?/td> |
鍏紡闀胯繖鏍凤細
鈥?strong>鈥婼SIM(x,y) = [浜害鍥犲瓙] 脳 [瀵规瘮搴﹀洜瀛怾 脳 [缁撴瀯鍥犲瓙]鈥?/strong>鈥?br/>
锛堢湅涓嶆噦娌″叧绯伙紝鐭ラ亾瀹冩瘮鍍忕礌姣斿鑱槑灏辫锛侊級
馃З 涓夈€佹墜鎶婃墜鎷嗚ВSSIM鐨勪笁澶х粷鎷?/h3>
鈥?strong>鈥?. 浜害瀹瑰繊鈥斺€旀櫄涓婄湅鎵嬫満涔熶笉鍒虹溂鈥?/strong>鈥?br/> 馃尠 渚嬪瓙锛氬闂存ā寮忔埅鍥炬瘮瀵规椂锛孲SIM浼氳嚜鍔ㄥ拷鐣ュ悎鐞嗙殑浜害璋冩暣锛岃€屽儚绱犳瘮瀵逛細鐤媯鎶ラ敊銆?/p>
鈥?strong>鈥?. 鎶楀櫔绁炲姛鈥斺€斿拷鐣ユ棤鍏崇揣瑕佺殑棰楃矑鈥?/strong>鈥?br/> 鍖荤枟褰卞儚甯告湁闆姳鐘跺櫔鐐癸紝SSIM閫氳繃鈥?strong>鈥嬪眬閮ㄧ獥鍙h绠椻€?/strong>鈥嬶紙閫氬父11x11鍍忕礌鍧楋級锛屾妸鍣偣褰撲綔"鑳屾櫙鏉傞煶"杩囨护鎺夈€?/p>
鈥?strong>鈥?. 缁撴瀯鎰熺煡鈥斺€旂湅鎳傚浘鐗囧湪"鐢讳粈涔?鈥?/strong>鈥?br/> 鏈€鐗涚殑鏄畠鑳藉彂鐜扳€?strong>鈥嬪唴瀹圭骇宸紓鈥?/strong>鈥嬶細
- 鍥炬爣杈圭紭澶氬嚭涓€涓敮榻?/li>
- 鏂囧瓧鎺掔増杞诲井閿欎綅
- 浜鸿劯鍏抽敭鐐瑰亸绉?/li>
馃挕 鈥?strong>鈥嬪喎鐭ヨ瘑鈥?/strong>鈥嬶細SSIM鍊煎湪0~1涔嬮棿锛?gt;0.95鍩烘湰鏃犳劅锛?lt;0.8鑲夌溂鍙宸紓锛堝伐涓氳川妫€甯哥敤闃堝€硷級
馃洜锔?鍥涖€佸疄鎴橈紒Python涓夎浠g爜鐜╄浆SSIM
python澶嶅埗from skimage.metrics import structural_similarity as ssim import cv2 # 璇诲彇鍥剧墖骞惰浆鐏板害鍥?/span> imgA = cv2.cvtColor(cv2.imread("璁捐绋?png"), cv2.COLOR_BGR2GRAY) imgB = cv2.cvtColor(cv2.imread("涓婄嚎鐗?png"), cv2.COLOR_BGR2GRAY) # 璁$畻SSIM鎸囨暟鍜屽樊寮傚浘 score, diff = ssim(imgA, imgB, full=True) print(f"鐩镐技搴﹀緱鍒嗭細{score:.4f}") # 杈撳嚭锛?.9231 # 鍙鍖栧樊寮傚尯鍩燂紙鐑姏鍥撅級 diff = (diff * 255).astype("uint8") cv2.imshow("宸紓鍖哄煙", diff)
杩愯缁撴灉浼氱敓鎴愪竴寮犫€?strong>鈥嬬儹鍔涘浘鈥?/strong>鈥嬸煍モ€斺€旇秺浜殑鍦版柟宸紓瓒婂ぇ锛屾瘮鐢ㄨ倝鐪兼壂鎻忛珮鏁?00鍊嶏紒
馃殌 浜斻€佽繖浜涜涓氭鍦ㄥ伔鍋风敤瀹冧滑...
鈥?strong>鈥嬧枌 鍖荤枟褰卞儚鍒嗘瀽鈥?/strong>鈥?鉁?br/> 鍖荤敓鐢⊿SIM瀵规瘮鎮h€呮不鐤楀墠鍚庣殑鑲洪儴CT褰卞儚锛岀簿鍑嗗畾浣?.5mm鐨勭粨鑺傚ぇ灏忓彉鍖栥€?/p>
鈥?strong>鈥嬧枌 宸ヤ笟璐ㄦ鈥?/strong>鈥?鉁?br/> 鎵嬫満灞忓箷妫€娴嬩腑锛屽儚绱犳瘮瀵规姄鍙戝厜鍧忕偣锛孲SIM鏌ユ秱灞備笉鍧囧寑闂锛屽弻鍓戝悎鐠с€?/p>
鈥?strong>鈥嬧枌 鍗槦鍥惧儚鐩戞帶鈥?/strong>鈥?鉁?br/> 閫氳繃姣斿涓嶅悓鏃舵湡鐨勫啘鐢板崼鏄熷浘锛孲SIM鑳藉彂鐜伴潪娉曚綔鐗╃妞嶅尯鐨勭粨鏋勫紓甯革紙姣斿绐佺劧鍑虹幇鐨勮鏁寸煩褰㈠湴鍧楋級銆?/p>
馃Л 鍏€佸皬鐧藉叆闂ㄩ伩鍧戞寚鍗?/h3>
-
鈥?strong>鈥嬪浘鐗囬澶勭悊寰堥噸瑕侊紒鈥?/strong>鈥?/p>
- 鍏堝仛灏哄褰掍竴鍖?
cv2.resize()
- 鍣0澶氱殑鍥惧厛楂樻柉婊ゆ尝
- 褰╄壊鍥捐浆鐏板害鐪佽绠楅噺锛堥櫎闈炴娴嬭壊褰╁樊寮傦級
-
鈥?strong>鈥嬪弬鏁拌皟浼樿瘈绐嶁€?/strong>鈥嬶細
python澶嶅埗# 璋冩暣楂樻柉绐楀彛鍜屾潈閲嶅弬鏁?/span>
ssim(imgA, imgB, win_size=11, gaussian_weights=True, sigma=1.5)
win_size
瓒婂ぇ鎶楀櫔瓒婂己浣嗙粏鑺傝秺妯$硦
sigma>1.5
鏇撮€傚悎鍖荤枟/閬ユ劅鍥惧儚
-
鈥?strong>鈥嬫贩鍚堜娇鐢ㄦ晥鏋滄洿浣斥€?/strong>鈥嬶細
鍥剧墖浠g爜graph LR
A[鍘熷鍥剧墖] --> B(鍍忕礌蹇€熷垵绛?
B -->|宸紓>闃堝€紎 C[SSIM绮剧粏瀹氫綅]
C --> D[鏍囪宸紓鍖哄煙]
馃拵 鐙瑙傜偣锛氭湭鏉ュ睘浜?浠跨敓鐪?绠楁硶
鈥?strong>鈥嬪浘鐗囬澶勭悊寰堥噸瑕侊紒鈥?/strong>鈥?/p>
- 鍏堝仛灏哄褰掍竴鍖?
cv2.resize()
- 鍣0澶氱殑鍥惧厛楂樻柉婊ゆ尝
- 褰╄壊鍥捐浆鐏板害鐪佽绠楅噺锛堥櫎闈炴娴嬭壊褰╁樊寮傦級
鈥?strong>鈥嬪弬鏁拌皟浼樿瘈绐嶁€?/strong>鈥嬶細
python澶嶅埗# 璋冩暣楂樻柉绐楀彛鍜屾潈閲嶅弬鏁?/span> ssim(imgA, imgB, win_size=11, gaussian_weights=True, sigma=1.5)
win_size
瓒婂ぇ鎶楀櫔瓒婂己浣嗙粏鑺傝秺妯$硦sigma>1.5
鏇撮€傚悎鍖荤枟/閬ユ劅鍥惧儚
鈥?strong>鈥嬫贩鍚堜娇鐢ㄦ晥鏋滄洿浣斥€?/strong>鈥嬶細
鍥剧墖浠g爜graph LR A[鍘熷鍥剧墖] --> B(鍍忕礌蹇€熷垵绛? B -->|宸紓>闃堝€紎 C[SSIM绮剧粏瀹氫綅] C --> D[鏍囪宸紓鍖哄煙]
鎴戞祴璇曡繃澶ч噺椤圭洰鍙戠幇锛氣€?strong>鈥婼SIM鍦ㄧ粨鏋勮瘑鍒笂鎺ヨ繎浜虹溂锛屼絾浠嶆湁宸窛鈥?/strong>鈥嬧€斺€旀瘮濡備汉鐪艰兘鐬棿鍙戠幇"鍥剧墖閲屽浜嗗彧鐚?锛岃€孲SIM闇€瑕佹惌閰嶇洰鏍囨娴嬬畻娉曘€?/p>
鏈€杩慚IT鐨勭爺绌惰〃鏄庯紝鈥?strong>鈥嬬粨鍚堜汉绫昏瑙夌毊灞傚鐞嗘満鍒垛€?/strong>鈥嬬殑鏂扮畻娉曪紙姣斿CNN+SSIM娣峰悎妯″瀷锛夛紝鍦ㄥ尰鐤楀奖鍍忓樊寮傛娴嬩腑璇姤鐜囬檷浣庝簡37%銆傝繖鎴栬棰勭ず鐫€锛氭湭鏉ョ殑"鎵捐尙"鎶€鏈笉浠呮槸绠楀儚绱狅紝鏇磋瀛︿細"鐞嗚В鍥惧儚璇箟"銆?/p>
鏈€鍚庤鍙ュぇ瀹炶瘽锛氬伐鍏峰啀寮轰篃寰楁噦鍘熺悊锛佷笅娆¢亣鍒板浘鍍忓樊寮傞棶棰橈紝涓嶅Θ鍏堥棶锛氣€?strong>鈥?鎴戞槸瑕佹暟鍍忕礌锛岃繕鏄湅缁撴瀯锛?鈥?/strong>鈥?閫夊鏂规硶锛屾晥鐜囩炕鍊崀 馃殌
本文由嘻道妙招独家原创,未经允许,严禁转载