Date: Feb 26, 2013 6:50 AM Author: Tony Kittler Subject: Re: ROC curve of target and source images "Carl S." wrote in message <kggdfd$51j$1@newscl01ah.mathworks.com>...

> "Carl S." wrote in message <kgfk3g$9i5$1@newscl01ah.mathworks.com>...

> > Hi,

> >

> > I need matlab codes to plot a roc curve of target and source images

> >

> > (I have searched but the files in FileExchange are not clear (not get image files as input to give the plotted curve) for my purpose)

>

> Hi,

> I have seen the following function;

> [tpr,fpr,thresholds] = roc(Targets, Outputs)

>

> I think this function gives the parameters to draw ROC curves, such as true positive, false negative... But, how to obtain the input parameters from png file images ?

I have performed the following process:

1) I have applied Dice similarity measurement for automatically segmented images and obtained the following similarity coefficients

image1 0.8313

image2 0.9157

image3 0.9328

image4 0.7790

image5 0.8547

image6 0.7026

2) I have chosen 0.7 as the threshold value, and wrote the following codes

scores = [0.8313 0.9157 0.9328 0.7790 0.8547 0.7026]

labels = [1 1 1 0 1 0] % <= Here, ones corresponds to positive (acceptable coefficient, zero corresponds to negative (not acceptable)

ROC(scores,labels);

The ROC function gives the TP and FP values and also draw the ROC curve. But the result is not good, although there is only two image that have zero label. So, the ROC curve is not correct. I still need a help, and it is urgent please :(

function

[Tps, Fps] = ROC(scores, labels)

%% Sort Labels and Scores by Scores

sl = [scores; labels];

[d1 d2] = sort(sl(1,:));

sorted_sl = sl(:,d2);

s_scores = sorted_sl(1,:);

s_labels = round(sorted_sl(2,:));

%% Constants

counts = histc(s_labels, unique(s_labels));

Tps = zeros(1, size(s_labels,2) + 1);

Fps = zeros(1, size(s_labels,2) + 1);

negCount = counts(1);

posCount = counts(2);

%% Shift threshold to find the ROC

for

thresIdx = 1:(size(s_scores,2)+1)

% for each Threshold Index

tpCount = 0;

fpCount = 0;

for i = [1:size(s_scores,2)]

if (i >= thresIdx) % We think it is positive

if (s_labels(i) == 1) % Right!

tpCount = tpCount + 1;

else % Wrong!

fpCount = fpCount + 1;

end

end

end

Tps(thresIdx) = tpCount/posCount;

Fps(thresIdx) = fpCount/negCount;

end

%% Draw the Curve

% Sort [Tps;Fps]

x = Tps;

y = Fps;

% Interplotion to draw spline line

count = 100;

dist = (x(1) - x(size(x,2)))/100;

xx = [x(1):-dist:x(size(x,2))];

% In order to get the interpolations, we remove all the unique numbers

[d1 d2] = unique(x);

uni_x = x(1,d2);

uni_y = y(1,d2);

yy = spline(uni_x,uni_y,xx);

% No value should exceed 1

yy = min(yy, 1);

plot(x,y,'x',xx,yy);