如何用matlab显示两个二进制图像的误差图

时间:2014-04-01 15:28:24

标签: image image-processing matlab matlab-figure

我有两个二进制图像,称为地面实况图像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中实现吗?

3 个答案:

答案 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))

enter image description here