Sliding window minimum and maximum filter
Ältere Kommentare anzeigen
I'm trying to apply a sliding window minimum and maximum filter to an image of a certain window size. Actually, I'm trying to find the optimum window size for it. But I really haven't gotten the hang of it. I presume that I should be using blockproc to implement the sliding window, but not really sure how to find the maximum and minimum filter. As to the implementation itself, should I use loops to slide the window across the entire area of the image ?
5 Kommentare
Image Analyst
am 29 Sep. 2012
blockproc() moves in "jumps" of the window size. Imerode and imdilate slide over by one pixel.
Matt J
am 29 Sep. 2012
In fact, blockproc can be made to move in smaller jumps than the window size by using the BorderSize parameter
doudou
am 1 Dez. 2012
@Matt J plz i have a similaire problem, how can i do to make blockproc() to move in smaller jumps (one pixel) and this is a link that describe what i have to do: http://www.fp.ucalgary.ca/mhallbey/texture_calculations.htm
Image Analyst
am 1 Dez. 2012
From the description "A two-element vector, [V H], specifying the amount of border pixels to add to each block. The function adds V rows above and below each block and H columns left and right of each block." it looks like you'd have a windowSize of 1 so that it moves over in jumps of 1 pixel each time, but the 'BorderSize' would be half your window width so that it includes more than just the one pixel it's centered on. So if you wanted a 5 by 5 window, you'd set a windowSize of 1 and a BorderSize of 2. I think - I haven't tried it.
doudou
am 1 Dez. 2012
@image Analyst thanks for your answer
Akzeptierte Antwort
Weitere Antworten (4)
Matt J
am 29 Sep. 2012
Bearbeitet: per isakson
am 25 Okt. 2014
I would just use a for-loop to do 2 separable passes. BLOCKPROC can't take advantage of the separable nature of the max/min filter:
A=rand(100);
window=3;
[m,n]=size(A);
B=A;
for ii=1:m+1-window
B(ii,:)=max(A(ii:ii+window-1,:),[],1);
end
for ii=1:n+1-window
B(:,ii)=max(B(:,ii:ii+window-1),[],2);
end
1 Kommentar
Royi Avital
am 23 Apr. 2014
This is nice and fast. Yet it shift the matrix to the right.
How would replicate the results of `imerode` or `imdilate` with Image Processing Toolbox (no `padaaray`) most efficiently?
Thaks.
Royi Avital
am 23 Apr. 2014
I would use:
localMaxImage = colfilt(inputImage, [winLength winLength], 'sliding', @max);
localMinImage = colfilt(inputImage, [winLength winLength], 'sliding', @min);
Though it is still requires patience. I wonder what would be the fastest way to do so without Image Processing Toolbox.
tilak tenneti
am 24 Okt. 2014
Bearbeitet: per isakson
am 25 Okt. 2014
i want to apply a sliding window minimum filter on input image I and obtain Imin and also apply sliding window maximum filter on Imin to obtain Imax : the following is code
N=1;
Imin=ordfilt2(I, 1, true(N));
N=10;
Imax = ordfilt2(Imin, N*N, true(N));
here i assume N as window size... but i am confused as how should i take N for minimum filter and again N for maximum filter?
Dan
am 19 Jun. 2017
function [minVals,maxVals] = minmaxfilt1(vector,nhoodSz)
vector = vector(:);
if nhoodSz < 3 || ~floor(mod(nhoodSz,2))
error('nhoodSz must be odd scalar');
end
minVals = min(conv2(vector,eye(nhoodSz)),[],2);
maxVals = max(conv2(vector,eye(nhoodSz)),[],2);
minVals = minVals(((nhoodSz-1)/2)+1: end- ((nhoodSz-1)/2));
maxVals = maxVals(((nhoodSz-1)/2)+1: end - ((nhoodSz-1)/2));
end
Kategorien
Mehr zu Image Processing Toolbox 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!