How do I understand the following code?

Hello,
I found this code online and I am trying to understand it for my study. I am unable to understand the following lines of code and I was wondering if someone will assist me in understanding. Specifically, I don't understand the part "%set the image size to suitable value" where it is giving scale and resizing the image and "%% image Resize"
%% Uploading input image
[filename,pathname] = uigetfile('*.*','Choose the input image');
im = imread([pathname,filename]);
% set the image size to suitable value
scale = 600/(max(size(im(:,:,1))));
im = imresize(im,scale*size(im(:,:,1)));
% % Image resize
[m,n,~] = size(im);
I would appreciate the assistance.
Thank you in advance.

 採用された回答

Adam Danz
Adam Danz 2020 年 10 月 19 日
編集済み: Adam Danz 2020 年 10 月 19 日

0 投票

The best way to understand it is by using the help or doc commands to look up each function name. At the top of each page you'll see a brief description of the function, inputs and outputs.
Here's a very general description of each line
% CHOOSE A FILE
[filename,pathname] = uigetfile('*.*','Choose the input image');
% READ THE IMAGE FILE IN AS IMAGE DATA
im = imread([pathname,filename]);
% DETERMINE THE SCALE OF THE IMAGE DATA
% (max(size(...)) returns the images maximum dimension
% THE IMAGE DATA (im) IS AN nXmX3 ARRAY OF R-G-B- COLOR VALUES
% BUT THIS LINE ONLY REFERENCES THE "R" VALUES
scale = 600/(max(size(im(:,:,1))));
% SCALE THE IMAGE
im = imresize(im,scale*size(im(:,:,1)));
% GET THE NEW IMAGE SIZE
[m,n,~] = size(im);
You can use imshow(im) to see the image.

6 件のコメント

Vinay Chawla
Vinay Chawla 2020 年 10 月 19 日
Thank you. I tried using the help or doc commands for functions and got some of them but not the othres.
The line " scale = 600/(max(size(im(:,:,1)))); " is still very unclear to me.
What is it doing?
Is it creating a scale for the image? or setting it to the actual scale of the image.
as for the " im = imresize(im,scale*size(im(:,:,1)));" Is this resizing the image based on actual scale (Ground Distance).
These lines are part of the code for determining crack dimensions. So I was wondering if the scale and resizing is given based on the actual field dimensions.
I am very new to MATLAB and Image Processing and I would really appreciate if you can provide an easier and detailed explanation on this.
Thank you for your help.
Adam Danz
Adam Danz 2020 年 10 月 19 日
"Is it creating a scale for the image?"
Yes.
This section gets the size of the first two dimensions of the image (width & height)
size(im(:,:,1))
This returns the max (width or height)
(max(size(im(:,:,1)))
This computes the scaling factor. So, if you're working with a tall image (height>width), then this will divide 600 by the height of the image. If height is smaller than 600, the scaling factor will be larger than 1 so the size of the image will increase. I don't know where 600 comes from.
600/(max(size(im(:,:,1))))
Image Analyst
Image Analyst 2020 年 10 月 20 日
It's possible that they want the algorithm to work for any size image but some of the parameters, for example filter window sizes, are built assuming a certain size of the image in pixels. If the image is not that size (say they're 10 times bigger), then the filters might not work as intended - as they did for the smaller images.
Vinay Chawla
Vinay Chawla 2020 年 12 月 16 日
Thank you so much for your responses. I really appreciate.
About the line "((max(size(im(:,:,1)))", only referencing the R-Values. After analyzing the image, I realized all the three color channerl values are similar. It is possible that that is the reason why only R value is considered? And is it possible that an image will have all the same RGB values? Please refer to th image below:
II would really appreciate any assistance in this regard.
Thank you.
Adam Danz
Adam Danz 2020 年 12 月 16 日
編集済み: Adam Danz 2020 年 12 月 16 日
> It is possible that that is the reason why only R value is considered?
Possibly. I advise reading about the array returned by imread so you can you can understand what im is
> is it possible that an image will have all the same RGB values
Yes, when all 3 RGB values are the same, it's a shade of gray/black.white
rgb = repmat(0:.1:1, 3,1)'
rgb = 11×3
0 0 0 0.1000 0.1000 0.1000 0.2000 0.2000 0.2000 0.3000 0.3000 0.3000 0.4000 0.4000 0.4000 0.5000 0.5000 0.5000 0.6000 0.6000 0.6000 0.7000 0.7000 0.7000 0.8000 0.8000 0.8000 0.9000 0.9000 0.9000
scatter(1:11,.5.*ones(1,11),250,rgb,'filled','MarkerEdgeColor','k')
Vinay Chawla
Vinay Chawla 2020 年 12 月 16 日
Thank you.

サインインしてコメントする。

その他の回答 (0 件)

製品

リリース

R2020a

質問済み:

2020 年 10 月 19 日

コメント済み:

2020 年 12 月 16 日

Community Treasure Hunt

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

Start Hunting!

Translated by