Image segmentation using thresholding

2 次查看(过去 30 天)
I have raw image of rocks like the one on the right, I want a code to get the result on the left
  3 个评论
DGM
DGM 2024-4-21
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.

请先登录,再进行评论。

回答(1 个)

DGM
DGM 2024-4-19
编辑:DGM 2024-4-19
Since we're playing guessing games, here's my guess.
% you might have an actual image, but all we have is a screenshot
inpict = imread('image.bmp');
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

产品


版本

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by