试图实施" imabsdiff"功能

时间:2014-06-15 08:34:29

标签: matlab image-processing scilab

我正在尝试在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 Image A Cocacola2.png Image 2

结果

右侧使用内置功能

result

1 个答案:

答案 0 :(得分:3)

您的问题可能是您尝试相互减去uint8个值。由于uint8不能为负数,因此当您执行a-b(在将其放入abs函数之前计算)时,您将无法获得任何案例的正确答案其中b大于a。

使用im2double将图片转换为双倍,并im2uint8将图片转换回来。

顺便说一句,您不需要在此处循环像素。你可以简单地做(一旦图像被转换成双倍):

C = abs(A-B)