1. 程式人生 > 程式設計 >淺談ROC曲線的最佳閾值如何選取

淺談ROC曲線的最佳閾值如何選取

為了獲取ROC曲線的最佳閾值,需要使用一個指標--約登指數,也稱正確指數。

藉助於matlab的roc函式可以得出計算。

% 1-specificity = fpr
% Sensitivity = tpr;
[tpr,fpr,thresholds] =roc(Tar',Val');
RightIndex=(tpr+(1-fpr)-1);
[~,index]=max(RightIndex);
%
RightIndexVal=RightIndex(index(1));
tpr_val=tpr(index(1));
fpr_val=fpr(index(1));
thresholds_val=thresholds(index(1));
disp(['平均準確率: ',num2str((RightIndexVal+1)*0.5)]);
disp(['最佳正確率: ',num2str(tpr_val)])
disp(['最佳錯誤率: ',num2str(fpr_val)])

至此計算結束了。

補充拓展:利用閾值分割目標影象

一.全域性閾值

淺談ROC曲線的最佳閾值如何選取

方法一:OTSU方法

otsu法(最大類間方差法,有時也稱之為大津演算法)使用的是聚類的思想,把影象的灰度數按灰度級分成2個部分,使得兩個部分之間的灰度值差異最大,每個部分之間的灰度差異最小,通過方差的計算來尋找一個合適的灰度級別來劃分。 所以可以在二值化的時候採用otsu演算法來自動選取閾值進行二值化。otsu演算法被認為是影象分割中閾值選取的最佳演算法,計算簡單,不受影象亮度和對比度的影響。因此,使類間方差最大的分割意味著錯分概率最小。

選擇閾值k,把畫素分為兩類:

淺談ROC曲線的最佳閾值如何選取

T=graythresh(f)即可實現用方法一計算歸一化的閾值。

二.局域閾值

當背景照度不均勻時,全域性閾值方法可能失效,此時,用局域變化的閾值函式T(x,y)分割影象f(x,y):

淺談ROC曲線的最佳閾值如何選取

matlab實現程式:

clear all;close all;clc;
I=imread('C:\Users\ASUS\Desktop\影象處理學習檔案\大二下\使用閾值分割目標_15\Fig0926(a)(rice).tif');
figure
imshow(I)
title('original image')
k=graythresh(I);
I1=im2bw(I,k);
figure
imshow(I1)
se=strel('disk',10); %產生半徑為10的圓盤形結構元素
fo=imopen(I1,se);  %用結構元素對灰度影象進行開運算
figure
imshow(fo)
title('Opened image')
f2=imtophat(I,se); %用原影象減去開運算影象,即對影象進行頂帽運算
figure
imshow(f2,[])  %顯示頂帽運算結果
title('Top-hat transformation')
f2=im2double(f2);
T=graythresh(f2);
bw2=im2bw(f2,T); %對頂帽處理後的影象進行閾值處理
figure
imshow(bw2,[])
title('Thresholded top-hat image') %顯示閾值處理後的頂帽影象

以上這篇淺談ROC曲線的最佳閾值如何選取就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。