Scanner grayscale vs color images


color image: kitchen1.tif

grayscale image: kitchen2.tif

W = k1 * R + k2 * G + k3 *B

Find k1, k2, k3 by least-squares

Matlab code

gray=imread('kitchen2.tif');
gray=im2double(gray);
rgb=imread('kitchen1.tif');
rgb=im2double(rgb);
len=size(rgb);
rgbd=reshape(rgb,len(1)*len(2),3);
grayd=reshape(gray,len(1)*len(2),1);
C=rgbd'*rgbd;
d=rgbd'*grayd;
k=C\d;

diff = gray - k(1)*rgb(:,:,1) - k(2)*rgb(:,:,2) - k(3)*rgb(:,:,3);

a(1) = max(diff(:));
a(2) = min(diff(:));
rms = std2(diff);

scd = (diff-a(2))/(a(1)-a(2));
imhist(scd);

Matlab results

C =

  1.0e+004 *

    6.9239    6.4029    5.6287
    6.4029    6.1035    5.3815
    5.6287    5.3815    5.1229

d =

  1.0e+004 *

    6.4717
    6.1061
    5.4191

k =

    0.3277
    0.5617
    0.1077

a =

    0.0789   -0.0369

rms =

    0.0105

scaled difference image (scd)

central differences

Matlab code

m = mean(rgbd)
m(4) = mean(grayd)
for i=1:3
rgbd(:,i) = rgbd(:,i)-m(i);
end
grayd = grayd - m(4);
C=rgbd'*rgbd;
d=rgbd'*grayd;
k=C\d;
diff = gray - k(1)*rgb(:,:,1) - k(2)*rgb(:,:,2) - k(3)*rgb(:,:,3);
a = [max(diff(:)) min(diff(:))];
rms = std2(diff);
scd = (diff-a(2))/(a(1)-a(2));
imhist(scd);

Matlab results

m =

    0.5353    0.5053    0.4753    0.5125

C =

  1.0e+004 *

    1.8216    1.5864    1.0986
    1.5864    1.5566    1.1051
    1.0986    1.1051    1.1008

d =

  1.0e+004 *

    1.5867
    1.4947
    1.0819

k =

    0.3222
    0.5653
    0.0937

a =

    0.0831   -0.0309

rms =

    0.0097

scaled difference image (scd)


Maintained by John Loomis, last updated 18 Jan 2003