1. 主页 > 小妙招

图像差异检测技术: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>
  1. 鈥?strong>鈥嬪浘鐗囬澶勭悊寰堥噸瑕侊紒鈥?/strong>鈥?/p>

    • 鍏堝仛灏哄褰掍竴鍖?cv2.resize()
    • 鍣0澶氱殑鍥惧厛楂樻柉婊ゆ尝
    • 褰╄壊鍥捐浆鐏板害鐪佽绠楅噺锛堥櫎闈炴娴嬭壊褰╁樊寮傦級
  2. 鈥?strong>鈥嬪弬鏁拌皟浼樿瘈绐嶁€?/strong>鈥嬶細

    python澶嶅埗
    # 璋冩暣楂樻柉绐楀彛鍜屾潈閲嶅弬鏁?/span>
    ssim(imgA, imgB, win_size=11, gaussian_weights=True, sigma=1.5)
    • win_size瓒婂ぇ鎶楀櫔瓒婂己浣嗙粏鑺傝秺妯$硦
    • sigma>1.5鏇撮€傚悎鍖荤枟/閬ユ劅鍥惧儚
  3. 鈥?strong>鈥嬫贩鍚堜娇鐢ㄦ晥鏋滄洿浣斥€?/strong>鈥嬶細

    鍥剧墖浠g爜
    graph LR
    A[鍘熷鍥剧墖] --> B(鍍忕礌蹇€熷垵绛?
    B -->|宸紓>闃堝€紎 C[SSIM绮剧粏瀹氫綅]
    C --> D[鏍囪宸紓鍖哄煙]

    宸紓>闃堝€?/p>

    鍘熷鍥剧墖

    鍍忕礌蹇€熷垵绛?/p>

    SSIM绮剧粏瀹氫綅

    鏍囪宸紓鍖哄煙


馃拵 鐙瑙傜偣锛氭湭鏉ュ睘浜?浠跨敓鐪?绠楁硶

鎴戞祴璇曡繃澶ч噺椤圭洰鍙戠幇锛氣€?strong>鈥婼SIM鍦ㄧ粨鏋勮瘑鍒笂鎺ヨ繎浜虹溂锛屼絾浠嶆湁宸窛鈥?/strong>鈥嬧€斺€旀瘮濡備汉鐪艰兘鐬棿鍙戠幇"鍥剧墖閲屽浜嗗彧鐚?锛岃€孲SIM闇€瑕佹惌閰嶇洰鏍囨娴嬬畻娉曘€?/p>

鏈€杩慚IT鐨勭爺绌惰〃鏄庯紝鈥?strong>鈥嬬粨鍚堜汉绫昏瑙夌毊灞傚鐞嗘満鍒垛€?/strong>鈥嬬殑鏂扮畻娉曪紙姣斿CNN+SSIM娣峰悎妯″瀷锛夛紝鍦ㄥ尰鐤楀奖鍍忓樊寮傛娴嬩腑璇姤鐜囬檷浣庝簡37%銆傝繖鎴栬棰勭ず鐫€锛氭湭鏉ョ殑"鎵捐尙"鎶€鏈笉浠呮槸绠楀儚绱狅紝鏇磋瀛︿細"鐞嗚В鍥惧儚璇箟"銆?/p>

鏈€鍚庤鍙ュぇ瀹炶瘽锛氬伐鍏峰啀寮轰篃寰楁噦鍘熺悊锛佷笅娆¢亣鍒板浘鍍忓樊寮傞棶棰橈紝涓嶅Θ鍏堥棶锛氣€?strong>鈥?鎴戞槸瑕佹暟鍍忕礌锛岃繕鏄湅缁撴瀯锛?鈥?/strong>鈥?閫夊鏂规硶锛屾晥鐜囩炕鍊崀 馃殌

本文由嘻道妙招独家原创,未经允许,严禁转载