How can I decrease intensity levels?
Show older comments
Hello,
I have RGB images and I got measurements for mean, max, min intensities. I want to decrease 20intensities from each shape in the image without limiting the highest value? For example if the shape has 85pixel at maximum, I want to make it 65, but the other shape has 110 , it should be 90. The blobs are in the same image, I split RGB, and working on only blue and green. Is that possible?
I attached function and one of my merged image, also my single command
Tugce2AnalyzeImage(originalImage, 20, 255)
Thank you
Tugce
Answers (2)
Image Analyst
on 21 Sep 2022
Edited: Image Analyst
on 21 Sep 2022
Not sure what "limiting" means to you when talking about uint8 images. The values are limited by 0 so if the value is 15, subtracting 20 will give you 0, not -5. If you still want -5 then you need to cast the values to double. Otherwise you can simply do
[r, g, b] = imsplit(rgbImage);
b = b - 20;
g = g - 20;
rgbImage = cat(3, r, g, b);
1 Comment
Image Analyst
on 24 Sep 2022
@Tugce Irem I'm still unsure after your comments to Walter what you mean by maximum and limiting. His code and my code both subtract 20, though his calls imclearborder and seems to call regionprops on the green gray scale image rather than a binary image. Anyway since you said that you know one image is just 20 gray levels higher than it should be due to some microscope glitch, why can't you just subtract 20 from the whole image (like Walter showed you at one point) or just only from the green and blue channels like you asked for and I showed you? What are we missing here?
Walter Roberson
on 21 Sep 2022
newImg = imresize(Img, size(Img, 1:2)-20);
6 Comments
Tugce Irem
on 21 Sep 2022
Walter Roberson
on 21 Sep 2022
For example if the shape has 85pixel at maximum, I want to make it 65
Do you mean that the shape is 85 pixels wide (or high) you want to reduce the shape to 65 pixels wide (or high) ?
Do you mean that the shape has a maximum intensity of 85 and you want to reduce the maximum intensity to 65? If so then do you want the intensities to scale linearly (so multiply each by 65/85) or do you want to subtract 20 from each intensity?
Is this all to be done on a shape-by-shape basis, with multiple shapes in the same image? Or when you say "shape" do you mean the entire image?
For example do you need to detect a coin and a ball on a background, and isolate them, and reduce their intensities by 20 each, and then re-insert the reduced-intensity objects back into the image with the background not having been reduced intensity ?
Walter Roberson
on 22 Sep 2022
regionprops pixelidxlist or similar property can give you array of linear indices into the image. You can then do
YourMatrix(ind) = YourMatrix(ind) - 20;
Image Analyst
on 22 Sep 2022
"I attached one of my images." <== Really? Where? I'm not seeing it. Of course, you should have done this right at the start, with your very first post.
And where in your code do you filter the blobs to extract or identify only the round ones?
If you have any more questions, then attach your image and code to read it in with the paperclip icon after you read this:
Tugce Irem
on 23 Sep 2022
Walter Roberson
on 23 Sep 2022
filename = 'https://www.mathworks.com/matlabcentral/answers/uploaded_files/1134565/originalImage.jpg';
rgb = imread(filename);
imshow(rgb);
title('original')
r = rgb(:,:,1);
g = rgb(:,:,2);
b = rgb(:,:,3);
gborderless = imclearborder(g);
g_of_rgb = zeros(size(rgb), 'like', rgb);
g_of_rgb(:,:,2) = gborderless;
imshow(g_of_rgb);
title('green channel')
blobprops = regionprops(g, 'PixelIdxList');
all_used_idx = vertcat(blobprops.PixelIdxList);
r_filtered = r; r_filtered(all_used_idx) = r_filtered(all_used_idx) - 20;
g_filtered = g; g_filtered(all_used_idx) = g_filtered(all_used_idx) - 20;
b_filtered = b; b_filtered(all_used_idx) = b_filtered(all_used_idx) - 20;
rgb_filtered = cat(3, r_filtered, g_filtered, b_filtered);
imshow(rgb_filtered);
title('after intensity adjustment')
Categories
Find more on Image Processing and Computer Vision 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!