Thresholding an image based on part of a histogram's values

4 次查看(过去 30 天)
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);

采纳的回答

Ameer Hamza
Ameer Hamza 2020-6-13
编辑:Ameer Hamza 2020-6-13
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 个评论
Image Analyst
Image Analyst 2020-6-18
Why not just try the Color Thresholder on the Apps tab of the tool ribbon and interactively set your thresholds???
Teshan Rezel
Teshan Rezel 2020-6-18
Hi Image Analyst, I've tried the tool and found it useful to a degree. But my issue is that I will need to analyse several batches of 900 images each, so doing them individually in the app would not be efficient. Furthermore, I need to analyse them in grayscale, which isn't an option on the app as far as I can see. Thanks for your suggestion!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Image Processing Toolbox 的更多信息

产品


版本

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by