Filter löschen
Filter löschen

Does Otsu is also used for color image segmentation.

10 Ansichten (letzte 30 Tage)
Aamir Ishaq
Aamir Ishaq am 29 Mär. 2018
Beantwortet: Walter Roberson am 1 Jul. 2018
I have applied Otsu on this image and get this black & white segmented image. Is it possible to get the same segment in its original color. I mean the dog, flowers and some grass under the dog should by as it is in original and rest of the image becomes black.
I = imread('D:\Dog.jpg');
I = rgb2gray(I);
imshow(I)
level = multithresh(I);
seg_I = imquantize(I,level);
figure
imshow(seg_I,[]);
  1 Kommentar
KALYAN ACHARJYA
KALYAN ACHARJYA am 29 Mär. 2018
Bearbeitet: KALYAN ACHARJYA am 29 Mär. 2018
It may be possible. In segmented images, there are two descriptors, whether it is a dog or flower? You can consider it by assuming blob area, largest is dog and rest are flowers. Based on the position of pixel information (Edit original Image).

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Guillaume
Guillaume am 29 Mär. 2018
The whole principle of Otsu is to work on intensities. So you could apply Otsu to the grayscale intensities, or the red channel intensities, or the blue channel intensities, etc, or some intensity derived from all 3 RGB channels, but the Otsu method has no concept of colour.
For colour segmentation, you need a different technique. You could use the Colour Thresholder App. Also look at the various topics at the bottom of the Segmentation help page.
  2 Kommentare
KALYAN ACHARJYA
KALYAN ACHARJYA am 29 Mär. 2018
Sir his question title is different, question description is different, I have commented on it. Am I right?
Image Analyst
Image Analyst am 1 Jul. 2018
Different than what? I think Guillaume's answer is fine and addresses the posters need.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 1 Jul. 2018
Yes,
I = imread('D:\Dog.jpg');
Ig = rgb2gray(I);
imshow(Ig)
level = multithresh(Ig);
seg_Ig = imquantize(Ig,level);
figure
imshow(seg_Ig,[]);
I_masked = I .* repmat( cast(seg_Ig-1, class(I)), 1, 1, size(I,3) );
figure
imshow(I_masked);
imquantize returns double when used in that form, and when given a single input value, the results of imquantize are 1 (value less than the threshold) and 2 (value greater than the threshold) . We subtract 1 to make those into 0 and 1, make the result into the same data type as the input image is, and replicate it along the third dimension to have the same number of color planes that the input image has. The multiplication then acts to mask the original image, turning the pixels black whereever the image intensity was lower than the threshold.

Community Treasure Hunt

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

Start Hunting!

Translated by