hall2

Contents

read image

rgb = imread('img2.jpg');

evaluate saturation

gmax = max(rgb,[],3);
gmin = min(rgb,[],3);
diff = im2double(gmax-gmin);
mask = diff<0.15;
imshow(mask);
Warning: Image is too big to fit on screen; displaying
at 50% 
g = im2double(rgb2gray(rgb));
black = g<0.3;
imshow(black&mask);
Warning: Image is too big to fit on screen; displaying
at 50% 
white = (g>0.7);
imshow(white&mask);
Warning: Image is too big to fit on screen; displaying
at 50% 
se1 = strel('square',7);
b1 = imdilate(black,se1);
w1 = imdilate(white,se1);
bw1 = w1&b1;
bw2 = bwareaopen(bw1,500);

imshow(bw2);
Warning: Image is too big to fit on screen; displaying
at 50% 
CC = bwconncomp(bw2);
disp(CC);
L = labelmatrix(CC);
imshow(label2rgb(L));
    Connectivity: 8
       ImageSize: [960 1280]
      NumObjects: 2
    PixelIdxList: {[1058x1 double]  [43436x1 double]}

Warning: Image is too big to fit on screen; displaying
at 50% 
s = regionprops(CC,'Image','FilledImage','Area','EulerNumber');
areas = [s.Area];
[maxarea idx] = max(areas);
imshow(s(idx).Image);
bw3 = s(idx).FilledImage&~s(idx).Image;
bw4 = bwareaopen(bw3,500);
CC2 = bwconncomp(bw4);
L2 = labelmatrix(CC2);
imshow(label2rgb(L2));
s2 = regionprops(CC2,'Area');

area = cat(1,s2.Area);
fprintf('number of squares %d\n',length(area));
fprintf('Euler %d\n',-s(idx).EulerNumber);
number of squares 26
Euler 26