How can I decrease intensity levels?
古いコメントを表示
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
回答 (2 件)
Image Analyst
2022 年 9 月 21 日
編集済み: Image Analyst
2022 年 9 月 21 日
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 件のコメント
Image Analyst
2022 年 9 月 24 日
@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
2022 年 9 月 21 日
newImg = imresize(Img, size(Img, 1:2)-20);
6 件のコメント
Tugce Irem
2022 年 9 月 21 日
Walter Roberson
2022 年 9 月 21 日
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
2022 年 9 月 22 日
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
2022 年 9 月 22 日
"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
2022 年 9 月 23 日
Walter Roberson
2022 年 9 月 23 日
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')
カテゴリ
ヘルプ センター および File Exchange で Image Processing and Computer Vision についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!