How to normalize an image in matlab?
32 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Yashaswini MU
am 27 Feb. 2016
Bearbeitet: Yashaswini MU
am 28 Feb. 2016
Hi, I have a region of interest of dimension 50*50. I want to normalize this image in order to obtain a row vector of dimensions equal to the number of pixels in the image i.e 1*2500. How can I achieve this? Can someone please help me? I have attached the image below.
0 Kommentare
Akzeptierte Antwort
John BG
am 27 Feb. 2016
X would be a test region of interest
X=zeros(5,5,3)
X_r=randi([0 255],5,5)
X_g=randi([0 255],5,5)
X_b=randi([0 255],5,5)
X(:,:,1)=X_r
X(:,:,2)=X_g
X(:,:,3)=X_b
then
L=reshape(X,3,25)
lines up all pixels on a single row. To get all reds
L(1,:)
to get the Luminance on a row
Y=sum(L,1)
Multiply by 10 the size of X to work with a region of interest same size as the one you suggest in the question.
If you find this answer of any help solving this question, please click on the thumbs-up vote link,
thanks in advance
John
3 Kommentare
Image Analyst
am 28 Feb. 2016
Your code does what you tell it to, but not necessarily what you want it to. You're replacing the image by binary noise and then reshaping and summing this complete noise. This does not look useful to me. What do you want the code to do? What are you really after? What do you want the sum to mean/represent?
Weitere Antworten (3)
John BG
am 27 Feb. 2016
Yshaswini
A=imread('roiresize.jpg')
[s1 s2 s3]=size(A)
roithread=reshape(A,3,s1*s2)
Ythread=floor(sum(roithread,1)/3) % Luminance of each pixel
Please note that because I have cropped the image you have attached the size of roiresize.jpg many not be exactly the same size of the file you have attached. Don't try the command squeeze, it's not what the name suggests.
If you find this answer of any help solving this question, please click on the thumbs-up vote link,
thanks in advance
John
Image Analyst
am 27 Feb. 2016
If you have a grayscale image of dimensions 50 rows by 50 columns, you can turn it into a 1*2500 row vector simply by doing
rowVector = grayImage(:)';
Or you can use reshape():
rowVector = reshape(grayImage, 1, []);
2 Kommentare
John BG
am 28 Feb. 2016
to Image Analyst,
hope you don't mind mind the following question:
the term 'normalize' applied to a still image means making black really black, white really white and to remove, detrend, clutter, DC, that may be compressing the the dynamic range of the image?
thanks for attention
John
Image Analyst
am 28 Feb. 2016
John, yes, that would be intensity normalization. I didn't address that - I just answered the reshaping 50x50 into 2500x1 question. If he also wanted intensity normalization, he can use the built-in function mat2gray(), which does a scaling and shifting of the data to a 0-1 range. If he wanted it in the 0-255 range instead, he would simply do
rowVector = 255 * mat2gray(rowVector);
Of course, it's a double and if you used imshow() without [] it would show as a white line. So you can either use []
imshow(rowVector, []); % Show double data
or cast it to uint8, if that is the data type that is wanted:
rowVector = uint8(255 * mat2gray(rowVector));
imshow(rowVector);
Of course this is all for a gray scale image. If the image is color, you'd have to take more care. You can't just normalize R, G, and B separately or you'll introduce color artifacts.
John BG
am 28 Feb. 2016
L.Csink D.Paulus U.Ahlrichs and B.Heigl (Koblenz 98, from Erlangen Uni)
mention 3 color normalization methods
- Color rotation
- Whitening
- Comprehensive normalization
Regarding Color rotation, the rotated color of a pixel cluster f (R,G,B) seems to be fr=A*f' in the color base (RG,BY,WB)
.JPG do not use (RG,BY,WB) but (R,G,B).
To directly normalize (R,G,B) pixels you need to calculate fr=A^-1*R*A(f-m)+[128 128 128] where R is the rotation matrix where A=[.5 -1 .5;-.875 0 .875;1.5 1.5 1.5]
You may want to read the whole article as well as follow the references in case there is already a function or script around to normalize color of cluster without having to reshape the matrix.
And obviously, first place to look at should be MATLAB CENTRAL, you may be interested to use the functions in:
or
hope it helps
John
0 Kommentare
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!