Thresholding an image based on part of a histogram's values
3 views (last 30 days)
Show older comments
Teshan Rezel
on 12 Jun 2020
Commented: Teshan Rezel
on 18 Jun 2020
Hi folks,
I'm trying to get the parts of an image that fall between 2 values of its grayscale histogram, the revert the image back to its colour form. So far, I am struggling to get anything but a black image! Any ideas on what I'm doing wrong please? Below is my code.
baseGray = rgb2gray(I);
isoLower = 135;
isoUpper = 155;
lessThan = baseGray < isoLower;
greaterThan = baseGray > isoUpper;
baseGray(lessThan) = 0;
baseGray(greaterThan) = 0;
grayThresh = imbinarize(baseGray);
grayThresh = bwareaopen(grayThresh, 3000);
grayThresh = imfill(grayThresh, 'holes');
grayThresh = bwperim(grayThresh);
grayThresh = imdilate(grayThresh, ones(5));
grayThresh = imerode(grayThresh, ones(3));
grayThresh = imfill(grayThresh, 'holes');
refigure = img.*repmat(uint8(grayThresh),[1 1 3]);
imshow(refigure);
0 Comments
Accepted Answer
Ameer Hamza
on 13 Jun 2020
Edited: Ameer Hamza
on 13 Jun 2020
Try something like this
img = im2double(imread('pears.png'));
img_gray = rgb2gray(img);
isoLower = 135/255; % double image, pixel intensity between 0 and 1
isoUpper = 155/255;
mask = (isoLower < img_gray) & (img_gray < isoUpper);
refigure = img;
refigure(~mask(:,:,[1 1 1])) = 0;
imshow(refigure)
10 Comments
Image Analyst
on 18 Jun 2020
Why not just try the Color Thresholder on the Apps tab of the tool ribbon and interactively set your thresholds???
More Answers (0)
See Also
Categories
Find more on Image Processing Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!