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