i have grayscale image in which i am seprating the brown spot from that grayscale image, i use wiener to get the raw spot, now i am confused how to seprate the brown spots from that gray image using kmeans algorithm.
MATLAB: How to do classification of brown spot
image processing
Related Solutions
OK, if you really need to it work for a full color image, here is code for that:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;format compact;fontSize = 22;%--------------------------------------------------------------------------------------------------------
% READ IN IMAGE
folder = pwd;baseFileName = 'image.jpeg';% Get the full filename, with path prepended.
fullFileName = fullfile(folder, baseFileName);% Check if file exists.
if ~exist(fullFileName, 'file') % The file doesn't exist -- didn't find it there in that folder.
% Check the entire search path (other folders) for the file by stripping off the folder.
fullFileNameOnSearchPath = baseFileName; % No path this time.
if ~exist(fullFileNameOnSearchPath, 'file') % Still didn't find it. Alert user.
errorMessage = sprintf('Error: %s does not exist in the search path folders.', fullFileName); uiwait(warndlg(errorMessage)); return; endendrgbImage = imread(fullFileName);% Get the dimensions of the image.
% numberOfColorChannels should be = 1 for a gray scale image, and 3 for an RGB color image.
[rows, columns, numberOfColorChannels] = size(rgbImage);% Display the image.
hFig = figure;subplot(2, 2, 1);imshow(rgbImage, []);impixelinfo;title('Original RGB Image', 'FontSize', fontSize, 'Interpreter', 'None');impixelinfo;hFig.WindowState = 'maximized'; % May not work in earlier versions of MATLAB.
drawnow;%--------------------------------------------------------------------------------------------------------% EXTRACTION OF IMAGE
% Get the max image
grayImage = min(rgbImage, [], 3);subplot(2, 2, 2);imshow(grayImage, []);impixelinfo;title('Gray Scale Image', 'FontSize', fontSize, 'Interpreter', 'None');impixelinfo;hFig.WindowState = 'maximized'; % May not work in earlier versions of MATLAB.drawnow;threshold = 240; % Whatever....
mask = grayImage < threshold; % Create a binary image (a mask)
% Extract the largest blob only.
mask = bwareafilt(mask, 1);% Fill holes
mask = imfill(mask, 'holes');% Display the image.subplot(2, 2, 3);imshow(mask, []);title('Mask Image', 'FontSize', fontSize, 'Interpreter', 'None');axis('on', 'image');% Extract the individual red, green, and blue color channels.
redChannel = rgbImage(:, :, 1);greenChannel = rgbImage(:, :, 2);blueChannel = rgbImage(:, :, 3);% Get the mean gray levels in R, G, and B.
meanGLR = mean(rgbImage(redChannel > threshold))meanGLG = mean(rgbImage(greenChannel > threshold))meanGLB = mean(rgbImage(blueChannel > threshold))% Mask the individual color channel images.
% Make outside the mask the mean of what's above the threshold.
redChannel(~mask) = meanGLR;greenChannel(~mask) = meanGLG;blueChannel(~mask) = meanGLB;% Recombine separate color channels into a single, true color RGB image.
rgbImage2 = cat(3, redChannel, greenChannel, blueChannel);% Display the cropped image.
subplot(2, 2, 4);imshow(rgbImage2, []);title('Final Image', 'FontSize', fontSize, 'Interpreter', 'None');axis('on', 'image');
Try this:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;format compact;fontSize = 22;%--------------------------------------------------------------------------------------------------------
% READ IN IMAGE
folder = pwd;baseFileName = 'image.png';% Get the full filename, with path prepended.
fullFileName = fullfile(folder, baseFileName);% Check if file exists.
if ~exist(fullFileName, 'file') % The file doesn't exist -- didn't find it there in that folder.
% Check the entire search path (other folders) for the file by stripping off the folder.
fullFileNameOnSearchPath = baseFileName; % No path this time.
if ~exist(fullFileNameOnSearchPath, 'file') % Still didn't find it. Alert user.
errorMessage = sprintf('Error: %s does not exist in the search path folders.', fullFileName); uiwait(warndlg(errorMessage)); return; endendgrayImage = imread(fullFileName);% Get the dimensions of the image.
% numberOfColorChannels should be = 1 for a gray scale image, and 3 for an RGB color image.
[rows, columns, numberOfColorChannels] = size(grayImage);if numberOfColorChannels > 1 % It's not really gray scale like we expected - it's color.
% Use weighted sum of ALL channels to create a gray scale image.
grayImage = rgb2gray(grayImage); % ALTERNATE METHOD: Convert it to gray scale by taking only the green channel,
% which in a typical snapshot will be the least noisy channel.
% grayImage = grayImage(:, :, 2); % Take green channel.
end% Display the image.
subplot(2, 2, 1);imshow(grayImage, []);title('Original Grayscale Image', 'FontSize', fontSize, 'Interpreter', 'None');impixelinfo;hFig = gcf;hFig.WindowState = 'maximized'; % May not work in earlier versions of MATLAB.
drawnow;%--------------------------------------------------------------------------------------------------------% SEGMENTATION OF IMAGE
% Get a binary image of just the blob and not including the black background or the white surround.
mask = grayImage > 0 & grayImage < 255; %imbinarize(grayImage);
subplot(2, 2, 2);imshow(mask, []);impixelinfo;title('Initial Mask Image', 'FontSize', fontSize, 'Interpreter', 'None');impixelinfo;% Display histogram of image but only the image within the mask
subplot(2, 3, 4);histogram(grayImage(mask), 0:255);grid on;title('Histogram of gray image', 'FontSize', fontSize);% Now get the threshold
thresh = 255 * graythresh(grayImage(mask))% Put a red line there at the threshold
xline(thresh, 'Color', 'r', 'LineWidth', 2);% Get a binary image of the bright stuff
brightStuff = grayImage >= thresh & mask;subplot(2, 3, 5);imshow(brightStuff, []);impixelinfo;title('Bright Pixels in Region', 'FontSize', fontSize, 'Interpreter', 'None');impixelinfo;subplot(2, 3, 6);darkStuff = ~brightStuff & mask;imshow(darkStuff, []);impixelinfo;title('Dark Pixels in Region', 'FontSize', fontSize, 'Interpreter', 'None');impixelinfo;
Best Answer