 |
OpendTect
6.6
|
Go to the documentation of this file.
43 {
return "Array 2D Filter Pars"; }
63 if ( !iop )
return false;
109 inline int nextStep();
133 inline void filterRow(
int);
134 inline void doPoint(
int,
int);
139 template <
class T>
inline
146 , inputrowsize_(a.info().getSize(0))
147 , inputcolsize_(a.info().getSize(1))
148 , nrcols_(2 * p.stepout_.col() + 1)
161 template <
class T>
inline
170 , inputrowsize_(input.info().getSize(0))
171 , inputcolsize_(input.info().getSize(1))
172 , nrcols_(2 * p.stepout_.col() + 1)
188 template <
class T>
inline
197 outputrowrg_ = rowrg;
198 outputcolrg_ = colrg;
206 if ( !input_.getData() )
209 return ErrorOccurred();
212 if ( pars_.stepout_.col()<1 && pars_.stepout_.row()<1 )
214 ErrMsg(
"Invalid parameters");
215 return ErrorOccurred();
218 linefilt_ = pars_.stepout_.row() == 0 || pars_.stepout_.col() == 0;
222 const int currow = outputrowrg_.start + nrrowsdone_;
223 if ( currow>outputrowrg_.stop )
234 const T* inputptr = pars_.filludf_
236 : input_.getData() + input_.info().getOffset( row, 0 );
240 for (
int col=outputcolrg_.start; col<=outputcolrg_.stop;
250 for (
int col=outputcolrg_.start; col<=outputcolrg_.stop; col++ )
260 const bool isweighted = calc_->isWeighted();
261 const int startrow = row - pars_.stepout_.row();
262 int firstrow = startrow;
263 if ( firstrow < 0 ) firstrow = 0;
264 const int endrow = row + pars_.stepout_.row();
265 int lastrow = endrow;
266 if ( lastrow >= inputrowsize_ ) lastrow = inputrowsize_-1;
268 const int startcol = col - pars_.stepout_.col();
269 int firstcol = startcol;
270 if ( firstcol < 0 ) firstcol = 0;
271 const int endcol = col + pars_.stepout_.col();
272 int lastcol = endcol;
273 if ( lastcol >= inputcolsize_ ) lastcol = inputcolsize_-1;
275 for (
int irow=firstrow; irow<=lastrow; irow++ )
277 const bool issiderow = irow == startrow || irow == endrow;
278 const int rowdist = row-irow;
279 const int rowdist2 = rowdist*rowdist;
280 const bool iscenterrow = irow == row;
282 const T* buf = input_.getData()+input_.info().getOffset(irow,firstcol);
284 for (
int icol=firstcol; icol<=lastcol; icol++, buf++ )
286 const bool issidecol = icol == startcol || icol == endcol;
287 const bool iscentercol = icol == col;
289 if ( !linefilt_ && ( (issidecol && !iscenterrow )
290 || (issiderow && !iscentercol) ) )
295 const int coldist = icol - col;
296 const int coldist2 = coldist*coldist;
297 float wt = pars_.rowdist_ * rowdist2 + coldist2 ;
298 wt = 1.f / (1 + pars_.distfac_ * wt);
299 calc_->addValue( *buf, wt );
306 output_.set( row-origin_.row(), col-origin_.col(),
307 (T) calc_->getValue(pars_.type_));
void doPoint(int, int)
Definition: array2dfilter.h:256
const Array2DFilterPars & pars() const
Definition: array2dfilter.h:106
void set(const char *ky, const char *val)
bool fillPar(IOPar &par) const
Definition: array2dfilter.h:48
RowCol origin_
Definition: array2dfilter.h:122
@ Average
Definition: stattype.h:23
mODTextTranslationClass(Array2DFilterer)
od_int64 nrDone() const
Definition: array2dfilter.h:111
bool get(const char *, short &) const
static const char * sKeyRowDistance()
Definition: array2dfilter.h:45
Interval< int > outputcolrg_
Definition: array2dfilter.h:125
Array2DFilterer(Array2D< T > &, const Array2DFilterPars &)
Definition: array2dfilter.h:140
IOPar * subselect(const char *) const
returns iopar with key that start with <str>.
static int MoreToDo()
Definition: task.h:143
const int inputcolsize_
Definition: array2dfilter.h:128
uiString uiMessage() const
will be message() again in 7.x
Definition: array2dfilter.h:110
void ErrMsg(const char *, bool progr=false)
#define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:289
#define od_int64
Definition: plftypes.h:35
bool linefilt_
Definition: array2dfilter.h:130
od_int64 totalNr() const
Definition: array2dfilter.h:113
Array2DFilterPars(Stats::Type t=Stats::Average, RowCol rc=RowCol(1, 1), bool filludf=false)
Definition: array2dfilter.h:33
static const char * sKeyArray2DFilterPars()
Definition: array2dfilter.h:42
~Array2DFilterer()
Definition: array2dfilter.h:189
bool usePar(const IOPar &par)
Definition: array2dfilter.h:60
virtual int getSize(int dim) const =0
IdxType & row()
Definition: posidxpair.h:44
Array2DImpl< T > input_
Definition: array2dfilter.h:121
const Array2D< T > & output() const
Definition: array2dfilter.h:104
Stats::RunCalc< float > * calc_
Definition: array2dfilter.h:119
Type
Definition: stattype.h:21
IdxType & col()
Definition: posidxpair.h:49
Parameters for Array2DFilterer.
Definition: array2dfilter.h:31
void setScope(const Interval< int > &rowrg, const Interval< int > &colrg)
Definition: array2dfilter.h:194
#define mClass(module)
Definition: commondefs.h:181
int nextStep()
Definition: array2dfilter.h:202
static const char * sKeyDistanceFactor()
Definition: array2dfilter.h:46
FixedString StepOut()
Definition: keystrs.h:224
Specification to enable chunkwise execution of a process.
Definition: executor.h:39
void mergeComp(const IOPar &, const char *)
merge entries, where IOPar's entries get a prefix
void filterRow(int)
Definition: array2dfilter.h:232
static int Finished()
Definition: task.h:142
FixedString Type()
Definition: keystrs.h:174
virtual const Array2DInfo & info() const =0
uiString uiNrDoneText() const
will be nrDoneText() in 7.x
Definition: array2dfilter.h:112
Stats::Type type_
Definition: array2dfilter.h:73
float rowdist_
non-undef = weighted filter
Definition: array2dfilter.h:76
Array2D< T > & output_
Definition: array2dfilter.h:117
static const char * sKeyFillUndefined()
Definition: array2dfilter.h:44
Implementation of Array2D.
Definition: arrayndimpl.h:102
String that is able to hold international (UTF-8) strings for the user interface.
Definition: uistring.h:121
CalcSetup & require(Type)
Array2DFilterPars pars_
Definition: array2dfilter.h:118
Interval< int > outputrowrg_
Definition: array2dfilter.h:124
void setYN(const char *, bool)
Setup for the Stats::RunCalc and Stats::ParallelCalc objects.
Definition: statruncalc.h:38
Filters an Array2D.
Definition: array2dfilter.h:91
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:274
RowCol stepout_
In nodes. Center point not counted.
Definition: array2dfilter.h:74
const int inputrowsize_
Definition: array2dfilter.h:127
IdxPair used for its row() and col().
Definition: rowcol.h:25
const int nrcols_
Definition: array2dfilter.h:129
int nrrowsdone_
Definition: array2dfilter.h:131
bool filludf_
Output when center point is undef?
Definition: array2dfilter.h:75
const Stats::RunCalc< float > & calc() const
Definition: array2dfilter.h:107
bool getYN(const char *, bool &) const
Array2D< T > & output()
Definition: array2dfilter.h:103
BufferString toString(const BufferStringSet &bss)
Definition: bufstringset.h:156
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:55
Array2D ( Subclass of ArrayND ) is a two dimensional array.
Definition: arraynd.h:140
float distfac_
if weigthed, distance factor
Definition: array2dfilter.h:77
Generated at
for the OpendTect
seismic interpretation project.
Copyright (C): dGB Beheer B.V. 1995-2021