function [char_out, letter] = projection_profileBeta()clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;%format compact;
%format loose;
global caption;img_biner =imread('text_document.jpg');%find the vertical profile
verticalProfile = sum(binaryImage, 2);% Find dividing lines between the characters.
props = regionprops(verticalProfile == 0, 'Centroid');%props = regionprops(horizontalProfile <= 1, 'Centroid'); % new modified
xyCentroids = [props.Centroid];%dividingLines = xyCentroids(1:2:end)
dividingLines = xyCentroids(2:2:end)% Extract each line.
global hSubplots;figure(1); indexSubplot = (1:10);% indexSubplot2 = (6:10);
for k = 1 : length(dividingLines)-1 thisX = round(dividingLines(k)); nextX = round(dividingLines(k+1)); subplot(20, 10, indexSubplot ); thisLetter = binaryImage(thisX:nextX, :); % line cropping
imshow(thisLetter); caption = sprintf('Letter #%d', k); title(caption, 'FontSize', 8); indexSubplot = indexSubplot + 10; %% Cropping Lines into Character char_out = horizontal_profile(thisLetter); %% End pause(0.5) % se we can se every cropping
% indexSubplot = (indexSubplot) + 3;
% indexSubplot2 = (indexSubplot2) + 10;
if k ~= length(dividingLines)-1 % delete hSubplots if k is not euqal to limit loop
delete(hSubplots); % to refresh subplots of characters in the figure 2.
endend%SECOND FUNCTION to crop each characters from the each lines
function char_crop = horizontal_profile(img_letters)global caption;global hSubplots;figure(2)h1 = subplot(4, 12, 1:12);imshow(img_letters);title(caption,'FontSize',20);impixelinfo% Find horizontal profile
h2 = subplot(4, 12, 13:24);horizontalProfile = sum(img_letters, 1);%end
plot(horizontalProfile, 'b-');title('Horizontal Profile', 'FontSize', 20);grid on;% Find dividing lines between the characters.props2 = regionprops(horizontalProfile == 0, 'Centroid');%props = regionprops(horizontalProfile <= 1, 'Centroid'); % new modifiedxyCentroids2 = [props2.Centroid];%dividingLines = xyCentroids(1:2:end)dividingChar = xyCentroids2(1:2:end);hSubplots = {};for kk = 1 : length(dividingChar)-1 thisX2 = round(dividingChar(kk)); nextX2 = round(dividingChar(kk+1)); %h3 = subplot(4, 12, indexSub+kk);
h3 = subplot(4, 12, 24+kk); thisCharacter = img_letters(:, thisX2:nextX2); %
char_crop = padarray(img_out, [1 1], 'both'); % padding the image by 1 on every sides.
char_crop = imresize(char_crop,[42, 24]); % resizing to be 42m x 24n
char_crop = bwmorph(char_crop, 'thin', Inf);%Image Thinning
% imshow(char_crop); caption2 = sprintf('Character #%d', kk); title(caption2,'FontSize', 12); %collecting all subplots' positions.
hSubplots{kk} = {hSubplots, h3}; %endend% % Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'Outerposition', [0, 0.05, 1, 0.95]);drawnow;
when i tried this code without separated function , it worked beautifully. but when i separated the code into 2 different function in a m-file, the code gave me error like this:
Error using deleteArgument must contain a string.Error in projection_profileBETA (line 94) delete(hSubplots); % to refresh all subplots in the figure 2.
why did it demand a string suddenly on delete parameter ?
thank you
Best Answer