# Image segmentation using thresholding

5 views (last 30 days)
Aisha Al Ghurabi on 19 Apr 2024
Commented: DGM on 21 Apr 2024
I have raw image of rocks like the one on the right, I want a code to get the result on the left
##### 3 CommentsShow 1 older commentHide 1 older comment
Aisha Al Ghurabi on 20 Apr 2024
Rlue : Pores
Red: Grains
Green: in between
DGM on 21 Apr 2024
Hmm. There may be some better way of doing the classification, but I don't know what it would be. The gray levels that I estimated from the example image seems fairly plausible, though it might be worth trying to adjust them. I am also not really sure what subsequent steps need to be performed on these labeled regions; consequently, I'm not really sure how exact they need to be.

DGM on 19 Apr 2024
Edited: DGM on 19 Apr 2024
Since we're playing guessing games, here's my guess.
% you might have an actual image, but all we have is a screenshot
inpict = imcrop(inpict,[3.51 23.51 703.98 471.98]); % crop off the border
% split the two halves
A = im2gray(inpict(:,352+1:end,:)); % input
B = inpict(:,1:352,:); % output
% look at the hue of the output sample
[H,~,~] = rgb2hsv(B);
H = mod(H+0.2,1); % rotate to keep the red peak from wrapping across zero
imhist(H)
% split the histogram between the peaks
mkr = H < 0.25;
mkb = H > 0.80;
mkg = H > 0.45 & H < 0.6;
% sample the source in those regions
Ar = A(mkr);
Ag = A(mkg);
Ab = A(mkb);
subplot(3,1,1), imhist(Ar)
subplot(3,1,2), imhist(Ag)
subplot(3,1,3), imhist(Ab)
% the bins actually overlap quite a bit
% we don't know if that's due to scaling/registration errors
% or whether the classification is done differently
levels = [90 180]; % pick some bin edges
CT = [0 0 1; 0 1 0; 1 0 0]; % a color table
indpict = imquantize(A,levels); % an indexed image
figure
imshow(indpict,CT) % show it

### Categories

Find more on Image Segmentation in Help Center and File Exchange

R2024a

### Community Treasure Hunt

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

Start Hunting!