How to crop only selected part of an image automatically?

50 views (last 30 days)
Akib Rahman
Akib Rahman on 21 Jun 2018
Edited: Jyoti Verma on 11 Nov 2019
I have some image, from this image I need to identify only some portion that's mean segmentation. After identification, I need to crop this portion automatically. I found some code for automatically cropping but don't work exactly what I want! In my dataset images are different and for that reasons, segmented images also different. For example, a pre-processed image is first one and I need to detect the image in that way, an example is the second one.
Now I want to crop the right image automatically only segmented area.
In my code, it cropped incorrectly different region :(.
In my dataset images is different one from another!
My code is given below:
close all;
I=imread('CL_2_2.jpg');
figure, imshow(I);
I=rgb2gray(I);
BW=I>100;
figure,imshow(BW);
labeledImage = bwlabel(BW);
measurements = regionprops(labeledImage, 'BoundingBox', 'Area');
for k = 1 : length(measurements)
thisBB = measurements(k).BoundingBox;
I2=imcrop(I,[thisBB(1),thisBB(2),thisBB(3),thisBB(4)]);
[rows cols depth]=size(I2);
if rows*cols>200
I2=imresize(I2,[28 28]);
figure,imshow(I2);
end
end

Accepted Answer

Majid Farzaneh
Majid Farzaneh on 21 Jun 2018
Hi It works. But you have used imresize and have changed the segments. Also your threshold for segments sizes (200) may be large. For showing smaller objects you should take it smaller. I tried this and it worked:
close all;
I=imread('CL_2_2.jpg');
figure, imshow(I);
I=rgb2gray(I);
BW=I>100;
figure,imshow(BW);
labeledImage = bwlabel(BW);
measurements = regionprops(labeledImage, 'BoundingBox', 'Area');
for k = 1 : length(measurements)
thisBB = measurements(k).BoundingBox;
I2=imcrop(I,[thisBB(1),thisBB(2),thisBB(3),thisBB(4)]);
[rows cols depth]=size(I2);
if rows*cols>100
%%%%%%%I2=imresize(I2,[28 28]);
figure,imshow(I2);
end
end
  2 Comments
Majid Farzaneh
Majid Farzaneh on 21 Jun 2018
You're welcome. Your algorithm is not clever enough to recognize difference between ROI and the numbers. You can try some other threshold (e.g. 150) or develop your code to understand the numbers. For saving figures check this .

Sign in to comment.

More Answers (1)

Jyoti Verma
Jyoti Verma on 11 Nov 2019
Edited: Jyoti Verma on 11 Nov 2019
Croping an Image,
%Read and Display an Image,
I=imread('rec.jpg');
%rgb conversion,
J=rgb2gray(I);
subplot(221);imshow(I);title('RGB image Figure')
% Crop Image Using Crop Image Interactive Tool
[K, rect] = imcrop(J);
subplot(222);imshow(J);title('Gray image Figure')
% cropped image in matlab
I2 = imcrop(J,[12.5 8.5 411 99]);
subplot(223);imshow(I2);title('Cropped image Figure')
% BINARY CONVERSION
I3=im2bw(I2);
subplot(224);imshow(I3);title('Binary image Figure')

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by