From: Jeremy Ho on
Hi there,
How are you? I have a MATLAB problem which needs to be solved ASAP and I would really appreciate your help. What I’m trying to do is to replicate a spinal column and put it through compressive testing. The picture of this spinal column will then be taken using a greyscale camera. On the side of the spine, there will be a white piece of paper on which there will be a number of black dots of the same size. What I want to do is to get Matlab to identify the dots and automatically plot the coordinates of each dot in an excel file or similar. What I’ve done so far is managed to get the program written to identify circles, squares and such. However, I need to segment the picture in such a way that it only detects those black dots as mentioned. Any help with the codes would be very much appreciated. Thanks!


% Step 1: Read image Read in
RGB = imread('spine.bmp');
figure,
imshow(RGB),
title('Original Image');

% Step 2: Convert image from rgb to gray
GRAY = rgb2gray(RGB);
figure,
imshow(GRAY),
title('Grayscale Image');

% Step 3: Threshold the image Convert the image to black and white in order
% to prepare for boundary tracing using bwboundaries.
threshold = graythresh(GRAY);
BW = im2bw(GRAY, threshold);
figure,
imshow(BW),
title('Binary Image');

% Step 4: Invert the Binary Image
BW = ~ BW;
figure,
imshow(BW),
title('Inverted Binary Image');

% Step 5: Find the boundaries Concentrate only on the exterior boundaries.
% Option 'noholes' will accelerate the processing by preventing
% bwboundaries from searching for inner contours.
[B,L] = bwboundaries(BW, 'noholes');

% Step 6: Determine objects properties
STATS = regionprops(L, 'all'); % we need 'BoundingBox' and 'Extent'

% Step 7: Classify Shapes according to properties
% Square = 3 = (1 + 2) = (X=Y + Extent = 1)
% Rectangular = 2 = (0 + 2) = (only Extent = 1)
% Circle = 1 = (1 + 0) = (X=Y , Extent < 1)
% UNKNOWN = 0

figure,
imshow(RGB),
title('Results');
hold on
for i = 1 : length(STATS)
W(i) = uint8(abs(STATS(i).BoundingBox(3)-STATS(i).BoundingBox(4)) < 0.1);
W(i) = W(i) + 2 * uint8((STATS(i).Extent - 1) == 0 );
centroid = STATS(i).Centroid;
switch W(i)
case 1
plot(centroid(1),centroid(2),'wO');
case 2
plot(centroid(1),centroid(2),'wX');
case 3
plot(centroid(1),centroid(2),'wS');
end
end
return
From: us on
"Jeremy Ho" <jeremyho87(a)yahoo.co.uk> wrote in message <hrsdbn$s42$1(a)fred.mathworks.com>...
> % Step 1: Read image Read in
> RGB = imread('spine.bmp');

the problem is: (most) CSSMers do not have your SPINE.BMP...

us
From: Jeremy Ho on
hi,
i'm really sorry. i actually wanted to upload the image but i have no clue how to. is there a place i can do that?
From: Jeremy Ho on
try this. i uploaded my image to photobucket.

http://i876.photobucket.com/albums/ab323/jeremyho87/spine.jpg
From: us on
"Jeremy Ho" <jeremyho87(a)yahoo.co.uk> wrote in message <hrseh5$fv0$1(a)fred.mathworks.com>...
> hi,
> i'm really sorry. i actually wanted to upload the image but i have no clue how to. is there a place i can do that?

a google-based CSSMrepository once was created for that purpose...

http://groups.google.com/group/cssmrepository

note: most other web-sites cannot be accessed through tough multi-firewalls, eg, the ones of our hospital...

us