Resizing a binary image issue

6 vues (au cours des 30 derniers jours)
Aaron Devanathan
Aaron Devanathan le 5 Mai 2021
Hello. I am trying to resize a binary image to match the dimensions of another workspace matrix. Yet I am losing the non-zero values in the new, resized matrix. I have attached the binary image ("BW_05052021.png") that serves as a mask.
%The value of the BW image is 10000 x 8082 logical
%Looking to resize the image matrix to 142 x 128, not worried about maintaining scalar ratio
nnz(BW); % ans = 952
BW_resize = imresize(BW, [142 128]); % Resizing BW to the specified dimensions; 142 rows and 128 columns
nnz(BW_resize); % ans = 0 and not sure why
If needed, I can clarify or provide additional information as needed. Thank you!
  1 commentaire
Atsushi Ueno
Atsushi Ueno le 5 Mai 2021
It looks like the original image is lost because the ratio of resizing is too high. If you compare the original image with images that have been reduced to 75%, 50%, and 25%, you can see the limit of the reduction ratio at which the original image can be recognized. You may need gray-scale image for your requirement.

Connectez-vous pour commenter.

Réponse acceptée

Walter Roberson
Walter Roberson le 5 Mai 2021
Modifié(e) : Walter Roberson le 5 Mai 2021
This is to be expected.
You are compressing by a factor of 70 for rows and 63 for columns, so each output pixel is calculated by merging information from over 4400 pixels. If you were to take the mean over the area and say that it is to be set if the mean is > 1/2 then you would be far far far short for any pixel.
BW = imread('https://www.mathworks.com/matlabcentral/answers/uploaded_files/608410/BW_05052021.png');
imshow(BW)
rb = floor(size(BW,1)/142);
cb = floor(size(BW,2)/128);
reduced = cast(blockproc(BW, [rb, cb], @(block) max(block.data(:))), class(BW));
size(reduced)
ans = 1×2
143 129
BW_resize = imresize(reduced, [142 128]);
imshow(BW_resize)

Plus de réponses (1)

Image Analyst
Image Analyst le 5 Mai 2021
Modifié(e) : Image Analyst le 5 Mai 2021
To resize an image to match the size of another image, use imresize():
newImage2 = imresize(originalImage2, size(image1));

Produits


Version

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by