Image 如何用matlab显示两幅二值图像的误差图

Image 如何用matlab显示两幅二值图像的误差图,image,image-processing,matlab,matlab-figure,Image,Image Processing,Matlab,Matlab Figure,我有两个二值图像,分别是地面真实图像A和测试图像B。我想计算骰子系数的相似性。 计算起来很容易。这是一个相同的代码 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*lengt

我有两个二值图像,分别是地面真实图像A和测试图像B。我想计算骰子系数的相似性。 计算起来很容易。这是一个相同的代码

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中实现吗?

你想找这个吗-

AB = false(size(A));
AB(idx_inter) = true;
figure, imshow(AB)

你觉得你在找这个吗-

AB = false(size(A));
AB(idx_inter) = true;
figure, imshow(AB)

你觉得你在找这个吗-

AB = false(size(A));
AB(idx_inter) = true;
figure, imshow(AB)

你觉得你在找这个吗-

AB = false(size(A));
AB(idx_inter) = true;
figure, imshow(AB)

通常,对于二进制图像,请注意您不必执行
==1
部分。此外,如果您只需要知道一个图像中有多少个,您不需要使用
查找
,然后使用
长度
,您只需对一个二进制图像进行
求和

AB = A&B
imshow(AB);

dist = 2*sum(AB(:))/(sum(A(:))+sum(B(:)));

find
(抱歉,无法抗拒)
m=find(A)
用于256 x 256图像,速度大约是
==1
等效图像的两倍。

通常,对于二进制图像,请注意,您不必执行
==1
部分。此外,如果您只需要知道一个图像中有多少个,您不需要使用
查找
,然后使用
长度
,您只需对一个二进制图像进行
求和

AB = A&B
imshow(AB);

dist = 2*sum(AB(:))/(sum(A(:))+sum(B(:)));

find
(抱歉,无法抗拒)
m=find(A)
用于256 x 256图像,速度大约是
==1
等效图像的两倍。

通常,对于二进制图像,请注意,您不必执行
==1
部分。此外,如果您只需要知道一个图像中有多少个,您不需要使用
查找
,然后使用
长度
,您只需对一个二进制图像进行
求和

AB = A&B
imshow(AB);

dist = 2*sum(AB(:))/(sum(A(:))+sum(B(:)));

find
(抱歉,无法抗拒)
m=find(A)
用于256 x 256图像,速度大约是
==1
等效图像的两倍。

通常,对于二进制图像,请注意,您不必执行
==1
部分。此外,如果您只需要知道一个图像中有多少个,您不需要使用
查找
,然后使用
长度
,您只需对一个二进制图像进行
求和

AB = A&B
imshow(AB);

dist = 2*sum(AB(:))/(sum(A(:))+sum(B(:)));

find
(抱歉,我无法抗拒)
m=find(A)
是256 x 256图像的,速度大约是
==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))

我不知道这样的事情是否与你想象中的差异接近。正如您所指出的,您感兴趣的数量是一个标量,因此没有太多选项

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

我不知道这样的事情是否与你想象中的差异接近。正如您所指出的,您感兴趣的数量是一个标量,因此没有太多选项

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

我不知道这样的事情是否与你想象中的差异接近。正如您所指出的,您感兴趣的数量是一个标量,因此没有太多选项

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

A和B是二进制图像?是的,先生。两个图像都是二进制图像A和B是二进制图像?是的,先生。两个图像都是二进制图像A和B是二进制图像?是的,先生。两个图像都是二进制图像A和B是二进制图像?是的,先生。两幅图像都是二进制的