finder2

clear
close all
load filelist
warning('off','images:initSize:adjustingMag');
m = 6;
fname = files(m,:);
%m = 41;
rgb = imread(fname);
%rgb = imread('crop.jpg');
imshow(rgb);
%[msg msgid] = lastwarn
rgbd = im2double(rgb);
g = rgb2gray(rgbd);
imshow(g);
imhist(g);
black_thres = 0.5;
if m==6
    black_thres = 0.3;
end

black = g<black_thres;
imshow(black);
white_thres = 0.5;
if m==6
    white_thres = 0.6;
end

white = g>white_thres;
imshow(white);
strel_width = 11;
se1 = strel('square',strel_width);
b1 = imdilate(black,se1);
w1 = imdilate(white,se1);
bw1 = w1&b1;
bw2 = bwareaopen(bw1,500);

imshow(bw2);
CC = bwconncomp(bw2);
disp(CC);
L = labelmatrix(CC);
imshow(label2rgb(L));
    Connectivity: 8
       ImageSize: [1536 2048]
      NumObjects: 3
    PixelIdxList: {[343201x1 double]  [981x1 double]  [525x1 double]}

s = regionprops(CC,'Image','FilledImage','Area','EulerNumber','BoundingBox');
euler = [s.EulerNumber]';
idx = find(abs(euler)>20);

M = length(idx);
for k=1:M
    subplot(1,M,k);
    imshow(s(idx(k)).Image);
end
s(idx)
bb = s(idx).BoundingBox;
img = imcrop(rgb,floor(bb));
subplot(1,2,1);
imshow(img);
subplot(1,2,2);
imshow(s(idx).Image);
ans = 

           Area: 343201
    BoundingBox: [536.5000 183.5000 1197 1240]
          Image: [1240x1197 logical]
    FilledImage: [1240x1197 logical]
    EulerNumber: -274

close all;
sz = size(s(idx).Image);
nsquares = 49;
sqsize = ceil(0.1*(sz(1)*sz(2))/nsquares);
fprintf('sqsize %g\n',sqsize);
small_area = min([sqsize 500]);
fprintf('small_area %g\n',small_area);
bw3 = s(idx).FilledImage&~s(idx).Image;
bw4 = bwareaopen(bw3,small_area);
CC2 = bwconncomp(bw4);
L2 = labelmatrix(CC2);
subplot(2,2,1);
imshow(img);
subplot(2,2,2);
rgbm = label2rgb(L2,'jet','k');
imshow(rgbm);
subplot(2,2,3);
mask = sum(rgbm,3)==0;
imshow(mask);
subplot(2,2,4);
gc = imcrop(g,bb);
if numel(gc)~=numel(mask)
    diff = size(gc)-size(mask);
    rect = bb - [0 0 diff(2) diff(1)];
    gc = imcrop(g,rect);
end
gm = gc.*mask;
rgbn = cat(3,gm,gm,gm)+im2double(rgbm);
imshow(rgbn);
%imshow(label2rgb(L2));
sqsize 3030
small_area 500
s2 = regionprops(CC2,'Area','Eccentricity','Centroid');

area = cat(1,s2.Area);
maxarea = max(area);
fprintf('maximum area %g\n',maxarea);
kdx = find(area>0.5*maxarea);
fprintf('number of squares %d\n',length(area));
fprintf('number of fullsize squares %d\n',length(kdx));
fprintf('Euler %d\n',-s(idx).EulerNumber);
maximum area 2872
number of squares 275
number of fullsize squares 275
Euler 274
close all
area = [s2.Area]'/maxarea;
ecen = [s2.Eccentricity]';
[ecen_sorted ndx] = sort(ecen);
plot(area,ecen,'ko');
axis([0 1 0 1]);
grid;
xlabel('relative area');
ylabel('eccentricity');

%disp('      area      ecen');
%disp([area(ndx) ecen(ndx)])
ndx = find(ecen<0.8);

pts = reshape([s2.Centroid],2,length(s2));
imshow(label2rgb(L2));
hold on
plot(pts(1,ndx),pts(2,ndx),'ko','LineWidth',2,'MarkerSize',6,'MarkerFaceColor','white');
hold off
close all
rgbm = label2rgb(L,'jet','k');
mask = sum(rgbm,3)==0;
gm = g.*mask;
rgbn = cat(3,gm,gm,gm)+im2double(rgbm);
imshow(rgbn);
warning('on');