Array2D FMSegViewPrivate::compute_mask_boundary(const Array2D &mask) { Array2D B; int N1=mask.N1(); int N2=mask.N2(); B.allocate(N1,N2); for (int y=0; y<N2; y++) for (int x=0; x<N1; x++) { if (mask.getValue(x,y)) { for (int dy=-1; dy<=1; dy++) for (int dx=-1; dx<=1; dx++) { if ((!mask.getValue(x+dx,y+dy))&&(!B.getValue(x,y))) { B.setValue(1,x,y); } } } } return B; }
Array2D FMSegViewPrivate::compute_median_filter(const Array2D &array,int radius) { Array2D ret; ret.allocate(array.N1(),array.N2()); for (int y=0; y<array.N2(); y++) for (int x=0; x<array.N1(); x++) { QList<float> list; for (int dy=-radius; dy<=radius; dy++) for (int dx=-radius; dx<=radius; dx++) { list << array.getValue(x+dx,y+dy); } qSort(list); ret.setValue(list[list.count()/2],x,y); } return ret; }