From: Mathew Thomas on 27 May 2010 14:36 Hey all !!! I'm using imfreehand on an image and I save the coordinate points obtained. Using 'plot' command, I am able to reproduce the imfreehand shape on an image. But this does not stay on the image. Is there any way I can keep the shape on the image, so that I can include it in measurements ?? Note : I tried creating a binary mask by turning the coordinate points obtained from freehand to '1', but the pixels values have to be rounded up since they have decimal values, which creates a slight change in the output and the pixels are not longer connected.
From: ImageAnalyst on 27 May 2010 15:02 Mathew Thomas: Try this demo I wrote: % Change the current folder to the folder of this m-file. % (The line of code below is from Brett Shoelson of The Mathworks.) if(~isdeployed) cd(fileparts(which(mfilename))); end clc; % Clear command window. clear; % Delete all variables. close all; % Close all figure windows except those created by imtool. imtool close all; % Close all figure windows created by imtool. workspace; % Make sure the workspace panel is showing. fontSize = 20; % Read in standard MATLAB gray scale demo image. grayImage = imread('cameraman.tif'); subplot(2, 2, 1); imshow(grayImage, []); title('Original Grayscale Image', 'FontSize', fontSize); set(gcf, 'Position', get(0,'Screensize')); % Maximize figure. message = sprintf('Left click and hold to begin drawing.\nLift mouse button to finish'); uiwait(msgbox(message)); hFH = imfreehand(); % Create a binary image ("mask") from the ROI object. binaryImage = hFH.createMask(); % Display the freehand mask. subplot(2, 2, 2); imshow(binaryImage); title('Binary mask of the region', 'FontSize', fontSize); % Get coordinates of the boundary of the freehand drawn region. structBoundaries = bwboundaries(binaryImage); xy=structBoundaries{1}; % Get n by 2 array of x,y coordinates. x = xy(:, 2); % Columns. y = xy(:, 1); % Rows. subplot(2, 2, 1); % Plot over original image. hold on; % Don't blow away the image. plot(x, y, 'LineWidth', 2); % Burn line into image by setting it to 255 wherever the mask is true. burnedImage = grayImage; burnedImage(binaryImage) = 255; % Display the image with the mask "burned in." subplot(2, 2, 3); imshow(burnedImage); title('New image with mask burned into image', 'FontSize', fontSize); % Mask the image and display it. % Will keep only the part of the image that's inside the mask, zero outside mask. maskedImage = grayImage; maskedImage(~binaryImage) = 0; subplot(2, 2, 4); imshow(maskedImage); title('Masked Image', 'FontSize', fontSize);
From: Mathew Thomas on 27 May 2010 15:18 Hey ImageAnalyst, Thanks yet again. I'll try it out and let you know how it goes. Mathew
From: Mathew Thomas on 27 May 2010 22:35 Hey IA, I'm getting the following error when trying your demo code. ??? Attempt to reference field of non-structure array. Error in ==> delete at 25 binaryImage = hFH.createMask(); I did try the createMast procedure earlier also, but kept getting the same error. Let me know what you think. Thanks, Mathew
From: Mathew Thomas on 28 May 2010 09:57 Hey ImageAnalyst, I'm getting the following error when trying your demo code. ??? Attempt to reference field of non-structure array. Error in ==> delete at 25 binaryImage = hFH.createMask(); I did try the createMast procedure earlier also, but kept getting the same error. Let me know what you think. Thanks, Mathew
|
Next
|
Last
Pages: 1 2 Prev: Matlab basic tutorial Next: Complicated stacked Bar Charts: is this possible? |