
how to remove some regions from the image
4 次查看(过去 30 天)
显示 更早的评论
good day all, my objective is to extract optic disc from the image..when i try to extract it i get some unwanted regions..is it possible or is there any method to remove unwaneted regions from the image . in the image below i want all white regions to be eliminated...inside white region there is a black color round shaped region, that is my optic disc and i want only that black part to remain

0 个评论
回答(3 个)
Image Analyst
2014-2-27
编辑:Image Analyst
2014-2-27
Try this code:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 18;
% Read in a standard MATLAB gray scale demo image.
folder = 'D:\Temporary stuff';
baseFileName = 'optic.jpg';
% Get the full filename, with path prepended.
fullFileName = fullfile(folder, baseFileName);
% Check if file exists.
if ~exist(fullFileName, 'file')
% File doesn't exist -- didn't find it there. Check the search path for it.
fullFileNameOnSearchPath = baseFileName; % No path this time.
if ~exist(fullFileNameOnSearchPath, 'file')
% Still didn't find it. Alert user.
errorMessage = sprintf('Error: %s does not exist in the search path folders.', fullFileName);
uiwait(warndlg(errorMessage));
return;
end
end
grayImage = imread(fullFileName);
% Get the dimensions of the image.
% numberOfColorBands should be = 1.
[rows, columns, numberOfColorBands] = size(grayImage);
if numberOfColorBands > 1
% It's not really gray scale like we expected - it's color.
% Convert it to gray scale by taking only the green channel.
grayImage = grayImage(:, :, 2); % Take green channel.
end
% Display the original gray scale image.
subplot(2, 2, 1);
imshow(grayImage, []);
axis on;
title('Original Grayscale Image', 'FontSize', fontSize);
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
% Give a name to the title bar.
set(gcf, 'Name', 'Demo by ImageAnalyst', 'NumberTitle', 'Off')
% Binarize, invert, and clear border.
binaryImage = (grayImage < 128);
binaryImage = imclearborder(binaryImage);
subplot(2, 2, 2);
imshow(binaryImage, []);
title('Initial Binary Image', 'FontSize', fontSize);
axis on;
% Measure sizes
labeledImage = bwlabel(binaryImage);
measurements = regionprops(labeledImage, 'Area');
allAreas = [measurements.Area];
[biggestArea, indexOfBiggest] = sort(allAreas, 'descend')
% Extract largest
biggestBlob = ismember(labeledImage, indexOfBiggest(1));
% Convert to binary
biggestBlob = biggestBlob > 0;
subplot(2, 2, 3);
imshow(biggestBlob, []);
title('Final Binary Image', 'FontSize', fontSize);
axis on;

2 个评论
Image Analyst
2014-2-27
Everything I do is based on just the one image you supply. And if different images look different you may need a more robust algorithm. That's why I keep telling you to not waste time with some simplistic algorithm of your own, that may need an image-by-image tweaking, and see the more robust algorithms that were published here: http://iris.usc.edu/Vision-Notes/bibliography/contentsmedical.html#Medical%20Applications,%20CAT,%20MRI,%20Ultrasound,%20Heart%20Models,%20Brain%20Models in section 20.5.
Meshooo
2014-2-27
You can solve it by labeling. Try this code:
I = imread('optic.jpg');
%
bw = im2bw(I); % make it binary
bw = ~bw;
imshow(bw)
L = bwlabel(bw);
% Show the object labeled first.
imshow(L == 23) % your targeted object was number 23
Hope that solves your problem..
0 个评论
Dishant Arora
2014-2-27
Why not mask out region of interest using imfreehand.
h = imfreehand(gca);
wait(h) % waits for user to specify region of interest
bw = createMask(h) % Binary mask with 1's inside ROI
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Convert Image Type 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!