Poor Contrast Image?
이전 댓글 표시
I used a threshold technique to change the black backround of an RGB image to Gray with a but it didn't work properly. Since it changes the pixels which are black inside the image also to gray. The code used is:
X=imread('f100.bmp);
im2=x;
greycol= intmax(class(X))/2;
[rows,cols,panes] = size(X);
blacks = find(~sum(X,3));
im2( [blacks,blacks + rows*cols,blacks+2*rows*cols] ) = greycol;
imshow(im2)
Can anybody help me in improving the code or any suggestions?
답변 (2개)
Image Analyst
2012년 6월 22일
Try this code:
clc;
clearvars;
close all;
workspace;
fontSize = 20;
% Read in color demo image.
folder = 'C:\Users\Sachin\Documents\Temporary';
baseFileName = 't56hll.jpg';
fullFileName = fullfile(folder, baseFileName);
% 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;
end
end
rgbImage = imread(fullFileName);
% Get the dimensions of the image. numberOfColorBands should be = 3.
[rows columns numberOfColorBands] = size(rgbImage);
% Display the original color image.
subplot(2, 2, 1);
imshow(rgbImage, []);
title('Original Color Image', 'FontSize', fontSize);
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
% Extract the individual red, green, and blue color channels.
redChannel = rgbImage(:, :, 1);
greenChannel = rgbImage(:, :, 2);
blueChannel = rgbImage(:, :, 3);
% Binarize the red channel low enough to leave unwanted clutter.
binaryImage = redChannel > 30;
% Display the binary image.
subplot(2, 2, 2);
imshow(binaryImage, []);
title('Initial Binary Image', 'FontSize', fontSize);
% Measure areas
labeledImage = bwlabel(binaryImage);
blobMeasurements = regionprops(binaryImage, 'area');
% Now I'll demonstrate how to select certain blobs based using the ismember function.
allBlobAreas = [blobMeasurements.Area];
% Get a list of the blobs that meet our criteria and we need to keep.
allowableAreaIndex = allBlobAreas == max(allBlobAreas); % Take the largest object only.
keeperIndex = find(allowableAreaIndex);
% Extract only those blobs that meet our criteria, and
% eliminate those blobs that don't meet our criteria.
% Note how we use ismember() to do this.
keeperBlobsImage = ismember(labeledImage, keeperIndex);
% Fill in holes
mask = imfill(keeperBlobsImage, 'holes');
% Display the binary image.
subplot(2, 2, 3);
imshow(mask, []);
title('Final Mask Image', 'FontSize', fontSize);
% Mask the image.
maskedRgbImage = bsxfun(@times, rgbImage, cast(mask,class(rgbImage)));
subplot(2,2,4);
imshow(maskedRgbImage);
title('Final Masked RGB Image', 'FontSize', fontSize);
댓글 수: 2
Sachin
2012년 6월 22일
Image Analyst
2012년 6월 22일
So just add this line after the imfill() line:
% Invert it to get the gray background
mask = ~mask;
Plus, you've go to get away from that "for loop way of thinking" - you're not utilizing one of the best and most powerful features of MATLAB!
Image Analyst
2012년 6월 21일
0 개 추천
Using any kind of point process like intlut() or im2(im2==0) = greycol (there - there's your suggestions) will change all black pixels to gray no matter where they are. If you have a foreground and background and your foreground object has some "holes" in it, then you need to create a mask that has foreground and background where the foreground is solid - no holes. Very easy to do. Why don't you upload an image somewhere, such as tinypic.com?
카테고리
도움말 센터 및 File Exchange에서 Deep Learning Toolbox에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!