我正在尝试在scliab中实现imabsdiff函数,但是当我理论上并使用内置函数时,我得到了不同的结果
//Image subtraction with absolute difference and its effect
//Image 2 is being subtracted from image 1
clc;
clear;
//reading the image
A=ReadImage('E:\pruthvi iitb\DIP\Chapter 3 DIP\cocacola1.png');
B=ReadImage('E:\pruthvi iitb\DIP\Chapter 3 DIP\cocacola2.png');
A=RGB2Gray(A);
B=RGB2Gray(B);
figure(1);
ShowImage(A,'First Image');
title("First Image");
figure(2);
ShowImage(B,'Second Image');
title("Second Image");
[m n]=size(A);//size om image , M rows and N cols
//C=[][];//Absolute Subtracted Image
for i=1:m
for j=1:n
a=A(i,j);
b=B(i,j);
C(i,j)=abs(a -b);// absolute difference
end
end
figure(3);
ShowImage(C,'Absolute Subtracted Image');
title("Absolute Subtracted Image");
figure(4);
ShowImage(imabsdiff(A,B),'formula Image');
title("Absolute Subtracted Image");
Cocalcola1.png Cocacola2.png
结果
右侧使用内置功能
答案 0 :(得分:3)
您的问题可能是您尝试相互减去uint8
个值。由于uint8
不能为负数,因此当您执行a-b
(在将其放入abs
函数之前计算)时,您将无法获得任何案例的正确答案其中b大于a。
使用im2double
将图片转换为双倍,并im2uint8
将图片转换回来。
顺便说一句,您不需要在此处循环像素。你可以简单地做(一旦图像被转换成双倍):
C = abs(A-B)