Computing pixels value(Uk,Uj) from U -Image in YUV color Space
Show older comments
Hi everyone
I want to compute the pixel values let say Uk and Uj from UImage.Here is my code in which I am doing indexing.
UImage=imread(Uimage);
B=ones(length(UImage));
slidingwindow=conv2(B,UIimage,'same');%this part computes only centre pixels.
[pixelrow pixelcol]=size(slidingwindow);%Pixelrow and pixelcol are center pixels of window
for windrow=-1:1
row=pixelsrow+windrow;
for windcol=-1:1
col=pixelscol+windcol;
%% here I need some piece of code further May be Uk=UImage(row,col)???????????
end end
1 Comment
iup geii amiens
on 20 May 2014
Hello Sir,
I am working on the same sheet. Please can i have your code and we may help each other :D
I will be grateful Have a nice day
Answers (2)
Thorsten
on 20 Feb 2013
To get the pixel values of a gray scale image
I = imread('cameraman.tif');
x = 20; y = 30;
Ixy = I(y, x);
To get the G pixel value of an RGB image
I = imread('peppers.png');
IGxy = I(y, x, 2);
Same should work for your U image if you have stored just the U channel or all three channels in your image.
8 Comments
Algorithms Analyst
on 20 Feb 2013
Thorsten
on 20 Feb 2013
If you want to compute some function, e.g., mean on sliding blocks, you can use
M = colfilt(I, [3 3], 'sliding', @mean);
If this does not help you, please ask more precisely what you want to compute.
Algorithms Analyst
on 20 Feb 2013
First you get the n x n subimages Uk and Vk from U and V at position x, y
Uk = U(ind1, ind2);
Vk = V(ind1, ind2);
with
ind1 = y-n/2:y+n/2;
ind2 = x-n/2:x+n/2;
The contribution of these subimages to bin j asscociated with some fixes colors Uj, Vj is then
dU = Uk(:) - Uj;
dV = Vk(:) - Vj;
Gj = Kj*exp(-(Du.^2+Dv.^2)/(2*sigma^2));
with normalization coefficient Kj.
Algorithms Analyst
on 20 Feb 2013
Algorithms Analyst
on 20 Feb 2013
Algorithms Analyst
on 20 Feb 2013
Then x and y are the location in the image where you compute your histograms. n = 12 is the size of your subwindow that is applied with a gap of 3 to your image.
To slide your window, use
gap = 3;
for x = 1:gap:size(I, 1)
for y = 1:gap:size(I, 2)
ind1 = y-n/2:y+n/2;
ind2 = x-n/2:x+n/2;
And for each location you need a third loop over the number of bins in your histogram
for j = 1:Nbins
dU = Uk(:) - Uval(j);
dV = Vk(:) - Vval(j);
Gj = Kj*exp(-(Du.^2+Dv.^2)/(2*sigma^2));
CH(x, y, j) = Gj;
end
end
end
Image Analyst
on 20 Feb 2013
Your code is all wrong. Try this:
UImage=imread(Uimage);
windowSize = 5;
sigma = whatever.....
kernel = fspecial('gaussian', windowSize, sigma);
slidingwindow=conv2(UIimage, kernel ,'same');
You don't need double for loops after that - conv2 does the sliding window filtering so it's already done. No need to try to do it again manually.
9 Comments
Algorithms Analyst
on 20 Feb 2013
Based on one of AlgorithmAnalyst's previous question I think that his question refers to the local kernel color histogram algorithm described in http://philippe.noriega.free.fr/fichiers/visapp06.pdf
Algorithms Analyst
on 20 Feb 2013
As far as I have understood the algorithm, you compute histograms at different image locations x, y. The histograms are by counting the frequency of Nj colors (Uj, Vj) in a 12 x 12 window around (x, y). To make the counting more robust, you increment the (Uj, Vj) bin not only if you encounter the color (Uj, Vj) in your 12 x 12 window, but you compute a Gaussian weighted similary between your 12 x 12 patch and the color (Uj, Vj). See my code I sketched above.
Algorithms Analyst
on 20 Feb 2013
Image Analyst
on 20 Feb 2013
The conv2 code essentially is 4 nexted for loops, the outer two move the window along - they scan the image over all rows and all columns. At a particular row and column inside those two loops there is a nested pair that scans over the pixels in the window (kernel) that has your Gaussian weights. Let's say these loops are over rw and cw. For example, if you have a 3 by 3 window, the outer loops will (eventually) get you to row,column 135, 154. So we need to scan a window around there from row 134 to 136, and from column 153 to 155. So when it's doing that, j and k are calculated from row and rw and column and cw. Specifically if rw goes from -1 to +1, then j = row + rw, and k = column + cw. So j and k would start out at (134, 153), then go to (135,153) then to (136,153) then to (134, 154) and so on until it visits all 9 locations in the window centered around (135, 155). But when you're taking the U value from (134,154), you don't have a Gaussian with those values because the Gaussian is just a 3x3 window so the value of the Gaussian at that upper left window pixel would be the Gaussian value at (-1, -1), in other words, the Gaussian value at a distance of sqrt(2) away from the center of the Gaussian. I hope that explains it better.
Algorithms Analyst
on 20 Feb 2013
Image Analyst
on 20 Feb 2013
Correct, but I haven't really tried to understand what the algorithm does. You're just blurring the U channel. Not sure if that's part of the algorithm or not - I'm just going by what you said.
Algorithms Analyst
on 21 Feb 2013
Categories
Find more on Image Processing Toolbox 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!