Re: Re: ListCorrelate[] ??
- To: mathgroup at smc.vnet.net
- Subject: [mg30215] Re: [mg30182] Re: ListCorrelate[] ??
- From: "Mariusz Jankowski" <mjkcc at usm.maine.edu>
- Date: Thu, 2 Aug 2001 03:16:08 -0400 (EDT)
- References: <9jtkeq$894$1@smc.vnet.net> <200108010619.CAA03979@smc.vnet.net> <3B68324F.B2189A94@nature.berkeley.edu>
- Sender: owner-wri-mathgroup at wolfram.com
Brent, forget my comment about the ListCorrelate parameter. The two forms {n,-n} and {n,n} are equivalent whenever n=(Length[ker]+1)/2, so my earlier statement was inaccurate. The two forms both refer to the same element in list ker, namely the middle one for odd length lists ker. ----- Original Message ----- From: "Brent Pedersen" <bpederse at nature.berkeley.edu> To: mathgroup at smc.vnet.net Subject: [mg30215] Re: [mg30182] Re: ListCorrelate[] ?? > > thanks, > i had not tried Tr[Flatten[...]] for quick summation. > but, now i am confused about the 3rd argument in ListCorrelate[]... > first to answer your question. yes, this is similar to edge enhancement > for DIP but, i am using it to simulate dispersal of populations where > each entry of the matrix is a population density and ListCorrelate[] simulates > dispersal. > i assume (to avoid a loss of individuals at the edge of the lattice) > periodic boundaries such that the surface essentially becomes a torus > (or a donut as noted by Daniel Licthblau). > so, i have been using ListCorrelate[kern,matrix, {n,-n}] > where n is the maximum dispersal radius +1 > because this allows the kernel to "hang" over the edge of the population > lattice by n on all sides. then, for the case where i wish > to have "absorbing boundaries" where individuals can move off > the matrix i use: > ListCorrelate[kern,matrix, {n,-n},0] > assuming that the automatic padding is at least n zeros on all sides. > is this correct for my purposes? Yes, the constant parameter 0 will cause padding of data with zeros to the extent defined by value n. > and another question, how would one create "reflecting boundaries" where > individuals that would normally leave the edge of the matrix, instead > remain on the edge? > If you mean a boundary extension that replicates the first/last element (or n elements) of each row or column, the solution is not so simple, meaning it cannot be accomplished inside of ListCorrelate. For the simplest case of padding a 1-D list with one element on both ends the solution is: In[68]:= data = Range[5] Out[68]= {1, 2, 3, 4, 5} In[69]:= PadLeft[PadRight[data, Length[data] + 1, data[[-1]]], Length[data] + 2, data[[1]]] Out[69]= {1, 1, 2, 3, 4, 5, 5} For matrices, a simple minded but effective approach is to repeat the above for all rows and columns. So define fixedPad[data_List] := PadLeft[PadRight[data, Length[data] + 1, data[[-1]]], Length[data] + 2, data[[1]]]; and Transpose[fixedPad /@ Transpose[fixedPad/@data]], finally, since you padded the data use the following form of ListCorrelate (of course, will only work correctly for 3x3 kernel): ListCorrelate[ker, paddeddata] A multidimensional FixedPad function is in my Digital Image Processing package :). Hope this helps, Mariusz ====================================================== Mariusz Jankowski University of Southern Maine mjkcc at usm.maine.edu
- References:
- Re: ListCorrelate[] ??
- From: "Mariusz Jankowski" <mjkcc@usm.maine.edu>
- Re: ListCorrelate[] ??