我有两个二进制图像,称为地面实况图像A和测试图像B.我想计算Dice系数相似度defined here。 计算它很容易。这是一个相同的代码
function dist = dist_Dice(A,B)
% Calculation of the Dice Coefficient
idx_img = find(B== 1);
idx_ref = find(A== 1);
idx_inter = find((B== 1) & (A== 1));
dist = 2*length(idx_inter)/(length(idx_ref)+length(idx_img));
结果是一个数字。但我的工作是如何通过图像直观地显示这个结果。图像的范围从0到1.我不知道解决它?我认为它类似于两个图像的重叠,区域重叠的像素等于0,否则等于1.你能帮我在matlab中实现吗?
答案 0 :(得分:1)
认为你正在寻找这个 -
AB = false(size(A));
AB(idx_inter) = true;
figure, imshow(AB)
答案 1 :(得分:1)
通常,对于二进制图像,请注意您不必执行==1
部分。另外,如果您只需要知道图片中有多少个,那么您就不需要使用find
然后使用length
,只需sum
就可以使用二进制文件图像:
AB = A&B
imshow(AB);
dist = 2*sum(AB(:))/(sum(A(:))+sum(B(:)));
我find
(对不起,无法抗拒)m = find(A)
用于256 x 256图像,大约是==1
等效图像的两倍。
答案 2 :(得分:1)
我不知道在可视化差异方面,这样的东西是否与您的想法相近。正如您所指出的,您感兴趣的数量是标量,因此没有太多选项。
RandStream.setDefaultStream(RandStream('mt19937ar','seed',0)); % For reproducibility of results
a = rand(10);
b = rand(10);
A = im2bw(a, graythresh(a));
subplot(2,2,1)
imshow(A, 'InitialMagnification', 'fit')
title('A (ground truth image)')
B = im2bw(b, graythresh(b));
subplot(2,2,2)
imshow(B, 'InitialMagnification', 'fit')
title('B (test image)')
idx_img = find(B);
idx_ref = find(A);
idx_inter = find(A&B);
common_white = zeros(size(A));
common_white(idx_inter) = 1;
subplot(2,2,3)
imshow(common_white, 'InitialMagnification', 'fit')
title('White in both pictures')
dist = 2*length(idx_inter)/(length(idx_ref)+length(idx_img))
idx_img = find(~B);
idx_ref = find(~A);
idx_inter = find(~A&~B);
common_black = ones(size(A));
common_black(idx_inter) = 0;
subplot(2,2,4)
imshow(common_black, 'InitialMagnification', 'fit')
title('Black in both pictures')
dist = 2*length(idx_inter)/(length(idx_ref)+length(idx_img))