From: Jeremy Ho on 5 May 2010 14:28 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 5 May 2010 14:37 "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 5 May 2010 14:48 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 5 May 2010 14:54 try this. i uploaded my image to photobucket. http://i876.photobucket.com/albums/ab323/jeremyho87/spine.jpg
From: us on 5 May 2010 14:59 "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
|
Next
|
Last
Pages: 1 2 Prev: Overdetermined equation system Next: help with image processing (URGENT!!) |