how to crop the grayscale image and find the cropped area and save

2 views (last 30 days)
i have a dicomimage i need to crop a particular area after finding the boundaries and applying skeletonisation
if true % code function croppedImage=getpix(grayImage,stringname) % Demo to have the user freehand draw an irregular shape over % a gray scale image, have it extract only that part to a new image, % and to calculate the mean intensity value of the image within that shape. % By ImageAnalyst % Change the current folder to the folder of this m-file. if(~isdeployed) cd(fileparts(which(mfilename))); end
% Make sure the workspace panel is showing. fontSize = 16; % Read in standard MATLAB gray scale demo image. %grayImage = imread('cameraman.tif'); % for i=2:10 % % I = otsuthres(grayImage,i); % IDX = otsu(grayImage,i) % end
figure; imshow(grayImage, []); %imshow(IDX,[]);
% %%%CODE%%%% % imc_figure = imcontrast(gca) %// Perform imcontrast % waitfor(imc_figure); %// Wait for the data to be updated in the current figure % grayImage = getimage(gcf);%// image data stored into image_data variable % % %%%CODE%%%%
title(stringname, 'FontSize', fontSize); set(gcf, 'Position', get(0,'Screensize')); % Maximize figure. message = sprintf('Left click and hold to begin free hand drawing.\nSimply lift the 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. % Calculate the area, in pixels, that they drew. numberOfPixels1 = sum(binaryImage(:)); % Another way to calculate it that takes fractional pixels into account. numberOfPixels2 = bwarea(binaryImage);
% 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, 3, 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, 3, 3); % imshow(burnedImage); % caption = sprintf('New image with\nmask burned into image'); % title(caption, 'FontSize', fontSize); % Mask the image and display it. % Will keep only the part of the image that's inside the mask, zero outside mask. blackMaskedImage = grayImage; blackMaskedImage(~binaryImage) = 0; % subplot(2, 3, 4); % imshow(blackMaskedImage); % title('Masked Outside Region', 'FontSize', fontSize); % Calculate the mean meanGL = mean(blackMaskedImage(binaryImage)); % Report results. % message = sprintf('Mean value within drawn area = %.3f\nNumber of pixels = %d\nArea in pixels = %.2f', ... % meanGL, numberOfPixels1, numberOfPixels2); % msgbox(message); % Now do the same but blacken inside the region. insideMasked = grayImage; insideMasked(binaryImage) = 0; % subplot(2, 3, 5); % imshow(insideMasked); % title('Masked Inside Region', 'FontSize', fontSize); % Now crop the image. topLine = min(x); bottomLine = max(x); leftColumn = min(y); rightColumn = max(y); width = bottomLine - topLine + 1; height = rightColumn - leftColumn + 1; croppedImage = imcrop(blackMaskedImage, [topLine, leftColumn, width, height]); % Display cropped image. % subplot(2, 3, 6); % imshow(croppedImage); % title('Cropped Image', 'FontSize', fontSize); close; end

Answers (0)

Community Treasure Hunt

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

Start Hunting!