I took an A4 paper which has blank small rectangles on it and filled some of them with my pen. I then scanned the document and saved the image as .tiff. I converted the image in grayscale and in binary form because I thought it might be useful.
My Question is: Is there a way to count how many small rectangles I filled?
Threshold the image. Label it. The number of labels is the number of rectangles.
If necessary, you can use regionprops() on the labeled image and change the Area measure in order to eliminate stray marks.
Like Walter said, threshold and label:
binaryImage = grayImage < 128; % or whatever intensity works. [labeledImage numberOfRectangles] = bwlabel(binaryImage); measurements = regionprops(labeledImage, 'Area'); allAreas = [measurements.Area];
You might find my image segmentation tutorial useful. It does conversion of grayscale into binary, then labeling and calling regionprops() to get the area. The Euler number (a count related to how many holes are in the region) would also be different for the filled vs. hollow rectangles.
Then it uses ismember to pick out the regions with area above a certain number of pixels (just what you need). Check it out for more info.