I am doing a peanut colour sorting project?can anybody help me with the code.

I have a rough code, but now I need to scan each row of the image and find HSV .please can anybody help me with the code.

 Accepted Answer

for row_number = 1 : size(YourRGBImage, 1)
hsv_of_row = rgb2hsv( YourRGBImage(row_number, :, :));
%now what?
end

More Answers (4)

You might also look into rgb2ind() to do a rough labeling of your different color regions. Once they're labeled you can then convert the image to HSV and then use regionprops to get the HSV of each region.

2 Comments

sir,iam a software intern , this is the project iam working on.i have just started in matlab, this is my rough code which i took from matlab example.
******************************************************************
[rgbimage,storedcoloredmap]=imread('C:/image.jpg');%storedclrmap=empty then it is not indexeds
[rows,colums,noofclrband]=size(rgbimage);%noofclrband=1itsmonochrome
subplot(3,4,1);
hrgb=imshow(rgbimage);%original image
hrgbpi=impixelinfo(hrgb);%to get the pixel info
hsvimage=rgb2hsv(rgbimage);%hsv image
himage=hsvimage(:,:,1); %h,s,v values
simage=hsvimage(:,:,2);
vimage=hsvimage(:,:,3);
subplot(3,4,2); %display and pixelinfo
h1=imshow(himage);
hhuepi=impixelinfo(h1);
subplot(3,4,3);
h2=imshow(simage);
hsatpi=impixelinfo(h2);
subplot(3,4,4);
h3=imshow(vimage);
hvalpi=impixelinfo(h3);
%histogram display
subplot(3,4,5)
[huecounts,huebinvalues]=imhist(himage);
maxcounthue=max(huecounts);
area(huebinvalues, huecounts, 'FaceColor', 'r');
grid on;
xlabel('Hue Value');
ylabel('Pixel Count');
subplot(3,4,6);
[saturationCounts, saturationBinValues] = imhist(simage);
maxCountSaturation = max(saturationCounts);
area(saturationBinValues, saturationCounts, 'FaceColor', 'g');
grid on;
xlabel('Saturation Value');
ylabel('Pixel Count');
subplot(3,4,7);
[valueCounts, valueBinValues] = imhist(vimage);
maxCountValue = max(valueCounts);
area(valueBinValues, valueCounts, 'FaceColor', 'b');
grid on;
xlabel('Value Value');
ylabel('Pixel Count');
%plot all together
subplot(3, 4, 8);
plot(huebinvalues, huecounts, 'r', 'LineWidth', 4);
grid on;
xlabel('Values');
ylabel('Pixel Count');
hold on;
plot(saturationBinValues, saturationCounts, 'g', 'LineWidth', 3);
plot(valueBinValues, valueCounts, 'b', 'LineWidth', 1);
%determining the threshold
hueThresholdLow = 0;
hueThresholdHigh = graythresh(himage);
saturationThresholdLow = graythresh(simage);
saturationThresholdHigh = 1.0;
%valueThresholdLow = graythresh(vimage);
valueThresholdLow=.80;
valueThresholdHigh = 1.0;
%masking value
hueMask = (himage >= hueThresholdLow) & (himage <= hueThresholdHigh);
saturationMask = (simage >= saturationThresholdLow) & (simage <= saturationThresholdHigh);
valueMask = (vimage >= valueThresholdLow) & (vimage <= valueThresholdHigh);
subplot(3, 4, 9);
imshow(hueMask, []);
subplot(3, 4, 10);
imshow(saturationMask, []);
subplot(3, 4, 11);
imshow(valueMask, []);
%the object to b masked
coloredObjectsMask = uint8(hueMask & saturationMask & valueMask);
subplot(3, 4, 12);
imshow(coloredObjectsMask, []);
%smallones get rid of it
coloredObjectsMask = uint8(bwareaopen(coloredObjectsMask, 100));
figure;
subplot(3, 3,1 );
imshow(coloredObjectsMask, []);
%smoothens the border
structuringElement = strel('disk', 4);
coloredObjectsMask = imclose(coloredObjectsMask, structuringElement);
subplot(3, 3, 2);
imshow(coloredObjectsMask, []);
coloredObjectsMask = imfill(logical(coloredObjectsMask), 'holes');
subplot(3, 3, 3);
imshow(coloredObjectsMask, []);
%make it similar to rgband plot rgb
coloredObjectsMask = cast(coloredObjectsMask, 'like', rgbimage);
maskedImageR = coloredObjectsMask .* rgbimage(:,:,1);
maskedImageG = coloredObjectsMask .* rgbimage(:,:,2);
maskedImageB = coloredObjectsMask .* rgbimage(:,:,3);
subplot(3, 3, 4);
imshow(maskedImageR);
subplot(3, 3, 5);
imshow(maskedImageG);
subplot(3, 3, 6);
imshow(maskedImageB);
%all together
maskedRGBImage = cat(3, maskedImageR, maskedImageG, maskedImageB);
subplot(3, 3, 8);
imshow(maskedRGBImage);
subplot(3, 3, 7);
imshow(rgbimage);%orinal img
subplot(3,3,9);
imshow(hsvimage);%hsv image
*******************************************************
but how can i sort good one and bad one from all these values? is there some other steps or values which has to be obtained for sorting? can you help me with necessary code or steps to be done further.
You've accepted an answer so I assume the above comment does not apply anymore.
If you still don't have a solution then attach your image.

Sign in to comment.

Alright, Aatheeswaran, since you won't post your image I had to make a guess at what one would look like to give you a full demo. Run the attached m-file

7 Comments

sorry for the delay sir. I have done it with a single peanut and group of peanuts. both images have been attached. thank you for the program I will check it out.
when I run the program with my image, I am getting an error, the image is attached.
Evidently it didn't find anything like it was programmed for. Try adjusting the thresholds.
sir, I only want peanuts which are in perfect shape and rest of them should get rejected. can you help me with the code?. these perfect shaped peanuts are then sorted according to their color.i have attached two peanut image having both good, bad and irregular shape.
You should really consult a professional to get an imaging system that will get you images that can be analyzed. No professional industrial system would make images like
when you could set up a system with much, MUCH better image capture characteristics. I mean if we came up with an algorithm to handle those two types of images, then you'd just come along with some third and fourth type of image where the algorithm doesn't work on. So there is no sense in trying to solve this type of scenario now, not until you can get good images. Best would be uniform lighting, with a Color Checker chart in the field of view, uniform focus, top down (not an oblique angle), high depth of field, telecentric lens, etc. I design imaging systems all the time - you really need to get professional help. It's SO much easier to create an algorithm to work with a great image than so spend months perfecting an algorithm to handle crummy, variable images - something that just wouldn't be necessary if you had great images to start with.
thank you, sir, for the advice.i will look into it.

Sign in to comment.

hi all,
I am mtech student and i want to develp a matlab code to sort bad nuts.can anybody help me with the code in sorting this white peanut from the good one. i saw the above programes but could not sort them. iam new to matlab so can anybody guide me how to sort them .
i have attached two images with two background.
I have this demo I made for finding bad peanuts. I hope someone finds it helpful.
% read the peanut image
inpict = imread('peanuts.png');
% use color-based thresholding to isolate peanuts from background
labpict = rgb2lab(inpict);
th = [54.57 100; 22.82 53; 22.10 74.46];
th = permute(th,[3 2 1]);
mask = all((labpict >= th(1,1,:)) & (labpict <= th(1,2,:)),3);
% remove extraneous blobs from mask
mask = imfill(mask,'holes');
mask = bwareaopen(mask,2000);
% get object properties
S = regionprops(mask,'centroid');
% plot results
imshow(inpict); hold on
title('Location of Bad Peanuts')
for k = 1:numel(S)
hp = plot(S(k).Centroid(1),S(k).Centroid(2),'bx');
hp.MarkerSize = 20;
hp.LineWidth = 3;
end

Categories

Community Treasure Hunt

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

Start Hunting!