Example #1
0
QPoint FMSegViewPrivate::point_to_index(QPoint pt) {
	if (m_target_rect.width()==0) return QPoint(0,0);
	if (m_target_rect.height()==0) return QPoint(0,0);
	float pctx=((float)pt.x()-m_target_rect.x())/(m_target_rect.width());
	float pcty=((float)pt.y()-m_target_rect.y())/(m_target_rect.height());
	int retx=(int)(pctx*m_array.N1());
	int rety=(int)(pcty*m_array.N2());
	if (retx<0) retx=0;
	if (retx>=m_array.N1()) retx=m_array.N1()-1;
	if (rety<0) rety=0;
	if (rety>=m_array.N2()) rety=m_array.N2()-1;
	return QPoint(retx,/*m_array.N2()-1-*/rety);
}
Example #2
0
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;
}
Example #3
0
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;
}