How can I color an image?
Ältere Kommentare anzeigen
Hello, I'm trying to segment an image using the DBScan algorithm, but the result is black and white. How can I convert the result into a colored image? I think, I need to use the reshape function, but I couldn't figure it out. I have little image processing knowledge. Thanks for the help.
rgbImage = imread('1.jpg');
imshow(rgbImage);
rChannel = rgbImage(:, :, 1);
gChannel = rgbImage(:, :, 2);
bChannel = rgbImage(:, :, 3);
Img = double([rChannel(:), gChannel(:), bChannel(:)]);
% m = Idx, n = Indicator for core points -> (X, Epsilon, MinPTS, Distance)
[Idx, n] = dbscan(Img, 0.3, 50,'Distance','chebychev');
imshow(Idx);
Akzeptierte Antwort
Weitere Antworten (1)
Ergin Sezgin
am 28 Mär. 2023
1 Stimme
Hello,
Reshape function only changes the size of an array but keeps the number of elements same. For a color image in RGB color space, you need to constitute three color channels, same sized matrices with your grayscale image. The problem is that when you convert your color image into a grayscale image, the color information is permanently lost and it is not possible to automatically recolorize. You can manually colorize it with a photo editing software but even in that case it will not be the same.
However, in your case the output doesn't seem to be an image. Instead it's an index array, representing which cluster or segment the pixels in your image belong to.
2 Kommentare
Image Analyst
am 28 Mär. 2023
Like I said in my answer below, kmeans, and probably dbscan, is not a good color segmentation method. Maybe you should try rgb2ind() if you want something simple.
Kategorien
Mehr zu Image Segmentation finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

