Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %% Creator Block
- % Marc Chapman 054888139
- %% Clear Everything
- clc; clear all; close all;
- %% Load original image
- image= imread('TopImg0000.bmp');
- %% Segment tray
- mask = (image > 3); % Create a dirty mask
- clean1 = bwareaopen(mask, 50); % Removes all objects smaller than specified size
- clean2 = imfill(clean1, 'holes'); % Fills all black holes within the masked part of the image
- se = strel('disk', 50); % sets edge cleaning options
- TrayMask = imopen(clean2, se); % creates new image using edge cleaning poptions
- tray=regionprops(TrayMask,'boundingbox'); % Creates a struct of all bounding boxes
- TrayFinal=imcrop(image, tray.BoundingBox); % Crops image based on bounding box
- %% Segment Label
- Image=TrayFinal;
- % Iteratively loop until label is very distinct
- % TODO: add some kind of dynamic check so that the loop can autodiscover
- % the level of distinction between label and package
- for i=1:3
- Image = imadjust(Image,[0.2 0.8],[]);
- end
- % Repeat the same processes as for segmenting tray
- % TODO: Create a function to make code reuse a practical option
- mask = (Image > 30);
- clean1 = bwareaopen(mask, 5000);
- clean2 = imfill(clean1, 'holes');
- se = strel('disk', 50);
- LabelMask = imopen(clean2, se);
- label=regionprops(LabelMask,'boundingbox');
- LabelFinal=imcrop(TrayFinal, label.BoundingBox);
- %% Segment Information
- % This is an extra task not in the brief, since it was decided
- % that the label itself contains lots of useless data and it is
- % in fact the product specific printed parts of the label that
- % are of interest to the User
- Image=LabelFinal;
- % loop until label data is clear
- % TODO: add some kind of dynamic check so that the loop can autodiscover
- % the level of distinction between label and package
- for i=1:7
- Image = imadjust(Image,[0.2 0.9],[]);
- end
- % Repeat the same processes as for segmenting tray
- % TODO: Create a function to make code reuse a practical option
- mask = (Image > 30);
- clean1 = bwareaopen(mask, 5000);
- clean2 = imfill(clean1, 'holes');
- se = strel('disk', 50);
- InfoMask = imopen(clean2, se);
- info=regionprops(InfoMask,'boundingbox');
- InfoFinal=imcrop(LabelFinal, info.BoundingBox);
- %% Display required images
- figure;
- subplot(3,3,1), imshow(image), title('Tray Input');
- subplot(3,3,2), imshow(TrayMask), title('Cleaned Mask');
- subplot(3,3,3), imshow(TrayFinal), title('Tray Final Image');
- subplot(3,3,4), imshow(TrayFinal), title('Label Input');
- subplot(3,3,5), imshow(LabelMask), title('LabelMask');
- subplot(3,3,6), imshow(LabelFinal), title('FinalLabel');
- subplot(3,3,7), imshow(LabelFinal), title('Information input');
- subplot(3,3,8), imshow(InfoMask), title('InfoMask');
- subplot(3,3,9), imshow(InfoFinal), title('FinalInfo');
- %% Write images to files
- imwrite(image,'CV_Assign1_Original.jpg','jpg','comment','Image owned by Marc Chapman 054888139 if found please return');
- imwrite(TrayMask,'CV_Assign1_TrayMask.jpg','jpg','comment','Image owned by Marc Chapman 054888139 if found please return');
- imwrite(TrayFinal,'CV_Assign1_TrayFinal.jpg','jpg','comment','Image owned by Marc Chapman 054888139 if found please return');
- imwrite(LabelMask,'CV_Assign1_LabelMask.jpg','jpg','comment','Image owned by Marc Chapman 054888139 if found please return');
- imwrite(LabelFinal,'CV_Assign1_LabelFinal.jpg','jpg','comment','Image owned by Marc Chapman 054888139 if found please return');
- imwrite(InfoMask,'CV_Assign1_InfoMask.jpg','jpg','comment','Image owned by Marc Chapman 054888139 if found please return');
- imwrite(InfoFinal,'CV_Assign1_InfoFinal.jpg','jpg','comment','Image owned by Marc Chapman 054888139 if found please return');
- %% Further tasks
- % Implement a text and QR Code reading function to write out
- % the specific data of the product, this data could then be used
- % for database operations such as productions levels, production speeds
- % error counting etc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement