I = imread('toyobjects.png'); imshow(I) hold on title('Original Image'); mask = false(size(I)); mask(50:150,40:170) = true; contour(mask,'Color','b'); w = activecontour(I, mask, 200, 'edge'); contour(bw,'Color','r'); title('Initial contour (blue) and final contour (red)');
MATLAB: How to find regions of any image using active contour
how to find regions using active contour
Related Solutions
Convert to grayscale and then threshold and find the bounding box
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
imtool close all; % Close all imtool figures.
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;format compact;fontSize = 20;% Read in the color image.
folder = pwd;baseFileName = 'm2.bmp';% Get the full filename, with path prepended.
fullFileName = fullfile(folder, baseFileName);if ~exist(fullFileName, 'file') % Didn't find it there. Check the search path for it.
fullFileName = baseFileName; % No path this time.
if ~exist(fullFileName, 'file') % Still didn't find it. Alert user.
errorMessage = sprintf('Error: %s does not exist.', fullFileName); uiwait(warndlg(errorMessage)); return; endendrgbImage = imread(fullFileName);% Get the dimensions of the image. numberOfColorBands should be = 3.
[rows, columns, numberOfColorBands] = size(rgbImage);% Display the original color image.
subplot(2, 3, 1);imshow(rgbImage, []);axis on;title('Original Color Image', 'FontSize', fontSize);drawnow;% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);% Histogram the red channel, but there is a huge spike at 255 so let's not count those.
subplot(2, 3, 2);grayImage = rgb2gray(rgbImage);imshow(grayImage, []);title('Gray Scale version', 'FontSize', fontSize);subplot(2, 3, 3);histogram(grayImage(grayImage<255))grid on;title('Histogram of Gray Scale Image', 'FontSize', fontSize);someThresholdValue = 150;binaryImage = grayImage > someThresholdValue;% Take largest blob
binaryImage = bwareafilt(binaryImage, 1);subplot(2, 3, 4);imshow(binaryImage);grid on;title('Binary Image', 'FontSize', fontSize);% Label the binary image.
labeledImage = bwlabel(binaryImage);props = regionprops(labeledImage, 'BoundingBox');bbox = props.BoundingBoxcroppedImageRGB = imcrop(rgbImage, bbox);subplot(2, 3, 5);imshow(croppedImageRGB);grid on;title('Cropped RGB Image', 'FontSize', fontSize);% Gray scale version of cropped image
croppedImageGray = imcrop(grayImage, bbox);subplot(2, 3, 6);imshow(croppedImageGray);grid on;title('Cropped Gray Scale Image', 'FontSize', fontSize);
That's not a gray scale image you attached, it's an RGB image. So try this
rgbImage = imread('C1fig.jpg');whos rgbImagesubplot(2, 1, 1);imshow(rgbImage);title('Original RGB image C1fig.jpg');axis('on', 'image');impixelinfomask = rgbImage(:, :, 1) == 0;% Extract the individual red, green, and blue color channels.
redChannel = rgbImage(:, :, 1);greenChannel = rgbImage(:, :, 2);blueChannel = rgbImage(:, :, 3);redChannel(mask) = 255;greenChannel(mask) = 0;blueChannel(mask) = 0;% Recombine separate color channels into a single, true color RGB image.
rgbImage = cat(3, redChannel, greenChannel, blueChannel);subplot(2, 1, 2);imshow(rgbImage);axis('on', 'image');impixelinfotitle('Altered RGB image');
If it really is a gray scale image, you can try this:
grayImage = imread('C1fig.jpg');if ndims(grayImage) == 3; grayImage = rgb2gray(grayImage);endwhos grayImagesubplot(2, 1, 1);imshow(grayImage);title('Original image C1fig.jpg');axis('on', 'image');impixelinfomask = grayImage == 0;% Initialize the individual red, green, and blue color channels.
redChannel = grayImage;greenChannel = grayImage;blueChannel = grayImage;redChannel(mask) = 255;greenChannel(mask) = 0;blueChannel(mask) = 0;% Recombine separate color channels into a single, true color RGB image.rgbImage = cat(3, redChannel, greenChannel, blueChannel);subplot(2, 1, 2);imshow(rgbImage);axis('on', 'image');impixelinfotitle('Altered RGB image');
Best Answer