clc;
clear all;
close all;

showhist = true;
min_grainarea = 150;
%roi
roifcol=400;
roilcol=1200;

% = imread('E:\Programas\MATLAB71\work\Ensaios Mestrado - 05.05.08\Imagens 2ºparte Trabalho\22.01.09 - Testes\P3000 3M Trizact.jpg');

imbw1 = imread('C:\Programas\MATLAB71\work\Ensaios Mestrado - 05.05.08\Imagens 2ºparte Trabalho\10.03.09 - Darkfield\P600\100309 L AGUA RL P600 a.jpg');
%imbw1 = rgb2gray(i);
nlin = size(imbw1,1);
ncol = size(imbw1,2);
roi_area=nlin*(roilcol-roifcol);

roi(1:nlin, 1:ncol)=true; 
roi(:,1:roifcol)=false;
roi(:,roilcol:ncol)=false;
roi=~roi;
% imbw1(mask)= 0;
figure(1)
imshow(imbw1);
hold on;
if showhist == true
%     figure(2)
%     imhist(imbw1);
end
%for j=1:150
    se = strel('square',150);
    imtpht1 = imtophat(imbw1(:,roifcol:roilcol),se);
%   figure(2)
%   imshow(imtpht1);
%   pause(0.8);
%end
if showhist == true
    figure(4)
    imhist(imtpht1);
end
iadjust = imadjust(imtpht1,[0 0.5],[]);
if showhist == true
    figure(5)
    imhist(iadjust);
end
figure(6)
imshow(iadjust);

th = graythresh(iadjust);
imbin = im2bw(iadjust,th);
% figure(7)
% imshow(imbin);
imope = imopen(imbin, strel('disk', 5));
% figure(32)
% imshow(imope)
[labeled,numobjs] = bwlabel(imbin,4);
stats  = regionprops(labeled, 'Centroid','Area');
allgrains = [stats.Area];
max_grainarea = max(allgrains);
mean_grainarea = mean(allgrains);
median_grainarea = median(allgrains);
limit_grainarea = abs(median_grainarea*0.5);
im1=iadjust;
im1(imbin)= 255;
figure(20)
imshow(im1);
hold on;

%[oimg,fimg,bwimg,eimg,enhimg] =  fft_enhance_cubs(im1);
%figure(100), imshow(enhimg);

for g=1:2
    figure(1)
    imshow(imbw1);
    hold on;
    numgrains=0;
    area_goodgrains=0;
    for i=1:numobjs
        centroids(i,:) = stats(i).Centroid;
        if stats(i).Area > limit_grainarea %limit_grainarea
            numgrains=numgrains+1;
            area_goodgrains(numgrains)=stats(i).Area;
            good_centroids(numgrains,:) = stats(i).Centroid;
            if stats(i).Area == max_grainarea
                plot(centroids(i,1)+roifcol, centroids(i,2), 'bs'); %+roifcol
                text(centroids(i,1)+roifcol+15,centroids(i,2)+15,'Max','Color','b');
            else
                plot(centroids(i,1)+roifcol, centroids(i,2), 'g+'); %+roifcol
                
            end
        else
            if g==1
                plot(centroids(i,1)+roifcol, centroids(i,2), 'r+'); %+roifcol
            end
        end
    end
    
    n_lin = size(iadjust,1);
    n_col = size(iadjust,2);
    
    div_lin = 10;
    div_col = 10;
    elem_h = n_lin / div_lin;
    elem_w = n_col / div_col;
    
    for j=1:1:div_col
        for i=1:1:div_lin
            roi_elem = good_centroids(find((good_centroids(:,2)>(elem_h*(i-1)+1))&(good_centroids(:,2)< i*elem_h)),:);
            roi_elem = roi_elem(find(roi_elem(:,1)>(elem_w*(j-1)+1) & roi_elem(:,1)< j*elem_w),:);
            centroids_count(i,j) = size(roi_elem,1);
        end
    end
    
    
    linha = 50;
    text(20,linha,'NºObjs Segmentados:','Color','g');
    text(280,linha,int2str(numobjs),'Color','g');
    linha = linha + 30;
    text(20,linha,'NºGrãos:','Color','g');
    text(280,linha,int2str(numgrains),'Color','g');
    linha = linha + 30;
    text(20,linha,'Area Inspec(Pixel):','Color','g');
    text(280,linha,int2str(roi_area),'Color','g');
    linha = linha + 30;
    text(20,linha,'Area Cob. Grão(Pixel):','Color','g');
    text(280,linha,int2str(sum(area_goodgrains)),'Color','g');
    linha = linha + 30;
    text(20,linha,'% Cobertura:','Color','g');
    text(280,linha,int2str((sum(area_goodgrains)/roi_area)*100),'Color','g');
    linha = linha + 30;
    text(20,linha,'NºObjs Desprezados:','Color','r');
    text(280,linha,int2str(numobjs-numgrains),'Color','r');
    linha = linha + 30;
    text(20,linha,'_________________________','Color','g');
    linha = linha + 30;
    text(20,linha,'Tamanho Grão(Pixel)','Color','g');
    linha = linha + 30;
    text(20,linha,'Max:','Color','g');
    text(280,linha,int2str(max_grainarea),'Color','g');
    linha = linha + 30;
    text(20,linha,'Médio:','Color','g');
    text(280,linha,int2str(mean_grainarea),'Color','g');
    linha = linha + 30;
    text(20,linha,'Mediana:','Color','g');
    text(280,linha,int2str(median_grainarea),'Color','g');
    linha = linha + 30;
    text(20,linha,'Limite:','Color','g');
    text(280,linha,int2str(limit_grainarea),'Color','g');
    linha = linha + 30;
    text(20,linha,'_________________________','Color','g');
    linha = linha + 30;
    text(20,linha,'Análise Distribução','Color','g');
    linha = linha + 30;
    text(20,linha,'Número Divisões:','Color','g');
    text(280,linha,int2str(div_lin*div_col),'Color','g');
    linha = linha + 30;
    text(20,linha,'Altura Div(Pixel):','Color','g');
    text(280,linha,int2str(elem_h),'Color','g');
    linha = linha + 30;
    text(20,linha,'Largura Div(Pixel):','Color','g');
    text(280,linha,int2str(elem_w),'Color','g');
    linha = linha + 30;
    text(20,linha,'NºPixeis/Div Teó.:','Color','g');
    text(280,linha,int2str(numgrains/(div_lin*div_col)),'Color','g');
    linha = linha + 30;
    linha = linha + 30;
    text(20,linha,'Média Pixeis/Div:','Color','g');
    text(280,linha,int2str(mean(centroids_count(:))),'Color','g');
    linha = linha + 30;
    %text(20,linha,'Desvios Padrão:','Color','g');
    %text(280,linha,int2str(std(centroids_count(:))),'Color','g');
    pause(1)
end

div = 100;
figure(22),hist(area_goodgrains,div)



figure(1)
freezone = false;
size_strel=10;
while freezone == false
    size_strel = size_strel-1;
    nl = 12*size_strel;
    nc = 8*size_strel;
    imfreezones(size(imbin,1),size(imbin,2)) = false;
    strel = true(nl,nc)
    for l=1:(size(imbin,1)/nl)
        for c=1:(size(imbin,2)/nc)
            teste = imbin((nl*(l-1))+1:(nl*l),(nc*(c-1))+1:(nc*c))& strel(:,:);
            if sum(teste(:))==0
                imfreezones((nl*(l-1))+1:(nl*l),(nc*(c-1))+1:(nc*c))=true;
                freezone = true;
            end
        end
    end
end