clear all
close all
clc

%% Retirar a informação do hardware
% Adaptor name
imaqhwinfo;

% Device ID
imaqhwinfo('kinect');

% Determinar o formato de vídeo
imaqhwinfo('kinect',1);

%% Criar video input
% Vizualizar video input summary
vid_RGB = videoinput('kinect',1,'RGB_640x480');

%% Adquirir frame RGB
img_RGB = getsnapshot(vid_RGB);
% imshow(img_RGB)

%% Segmentation

[rows, columns, numberOfColorChannels] = size(img_RGB);

% Converter imagem em escala de cinzentos
if numberOfColorChannels > 1
    img_RGB = rgb2gray(img_RGB);
end

% Visualizar imagem
subplot(2,3,1);
imshow(img_RGB);
axis on;
axis image;
caption = sprintf('Original Gray Scale Image');
title(caption, 'FontSize', 10, 'Interpreter','none');
drawnow;
hp = impixelinfo();

% [pixelCount, grayLevels] = imhist(img_RGB);
subplot(2,3,2);
imhist(img_RGB);
% Fazer o plot como gráfico de barras
% bar(grayLevels, pixelCount);
grid on;
title('Histogram of Original Image','FontSize',10,'Interpreter','none');
xlabel('Gray Level', 'FontSize',10);
ylabel('Pixel Count','FontSize',10);
% Escalar eixo X manualmente
% xlim([0 grayLevels(end)]);

% Binarizar a imagem através do threshold
mask = img_RGB < 150 

subplot(2,3,3);
imshow(mask);
axis on;
axis image;
title('Binary Image Mask', 'FontSize',10);
drawnow;
hp = impixelinfo();

% Limpar as "bolhas" da fronteiras
% mask = imclearborder(mask,8);
% Retirar a "bolha" maior
mask = bwareafilt(mask,1);

% Mostrar a imagem mask
subplot(2,3,4);
imshow(mask);
axis on;
axis image;
title('Cleaned Binary Image','FontSize',10);
drawnow;

subplot(2,3,5);
mask = ~bwareaopen(~mask, 1000);
imshow(mask);
axis on;
axis image;
title('Final Cleaned Mask','FontSize',10);
drawnow;
