Computing pixels value(Uk,Uj) from U -Image in YUV color Space
Ältere Kommentare anzeigen
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 Kommentar
iup geii amiens
am 20 Mai 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
Antworten (2)
Thorsten
am 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 Kommentare
Algorithms Analyst
am 20 Feb. 2013
Thorsten
am 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
am 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
am 20 Feb. 2013
Algorithms Analyst
am 20 Feb. 2013
Algorithms Analyst
am 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
am 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 Kommentare
Algorithms Analyst
am 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
am 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
am 20 Feb. 2013
Image Analyst
am 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
am 20 Feb. 2013
Image Analyst
am 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
am 21 Feb. 2013
Kategorien
Mehr zu Geometric Transformation and Image Registration finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!