本文整理汇总了C++中idx::dim方法的典型用法代码示例。如果您正苦于以下问题:C++ idx::dim方法的具体用法?C++ idx::dim怎么用?C++ idx::dim使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类idx
的用法示例。
在下文中一共展示了idx::dim方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void padder<T>::mirror(idx<T> &in, idx<T> &padded) {
idx<T> tmp, tmp2;
int i;
// mirror border left
for (i = std::max(0, (int) (ncol - in.dim(1) / 2)); i < ncol; ++i) {
tmp2 = in.narrow(1, 1, ncol - i - 1);
tmp = padded.narrow(1, 1, i);
tmp = tmp.narrow(2, in.dim(2), ncol);
idx_copy(tmp2, tmp);
}
// mirror border right
for (i = std::max(0, (int) (ncol - in.dim(1) / 2)); i < ncol; ++i) {
tmp2 = in.narrow(1, 1, in.dim(1) - ncol - 1 + i);
tmp = padded.narrow(1, 1, padded.dim(1) - 1 - i);
tmp = tmp.narrow(2, in.dim(2), ncol);
idx_copy(tmp2, tmp);
}
// mirror border top using out as input
for (i = std::max(0, (int) (nrow - in.dim(2) / 2)); i < nrow; ++i) {
tmp2 = padded.narrow(2, 1, nrow + nrow - i - 1);
tmp = padded.narrow(2, 1, i);
idx_copy(tmp2, tmp);
}
// mirror border bottom using out as input
for (i = std::max(0, (int) (nrow - in.dim(2) / 2)); i < nrow; ++i) {
tmp2 = padded.narrow(2, 1, padded.dim(2) - nrow * 2 - 1 + i);
tmp = padded.narrow(2, 1, padded.dim(2) - 1 - i);
idx_copy(tmp2, tmp);
}
}
示例2: d
idx<T> image_region_to_rect(idx<T> &im, const rect<int> &r, uint oheight,
uint owidth, rect<int> *cropped,
uint dh, uint dw)
{
// TODO: check that rectangle is within image
if (im.order() != 2 && im.order() != 3)
eblerror("expected a 2d or 3d input but got " << im);
idxdim d(im);
d.setdim(dh, oheight);
d.setdim(dw, owidth);
idx<T> res(d);
float hcenter = r.h0 + (float)r.height / 2; // input height center
float wcenter = r.w0 + (float)r.width / 2; // input width center
// // limit centers to half the width/height away from borders
// // to handle incorrect regions
// hcenter = MIN((float)im.dim(dh) - (float)r.height/2,
// std::max((float)r.height/2, hcenter));
// wcenter = MIN((float)im.dim(dw) - (float)r.width/2,
// std::max((float)r.width/2, wcenter));
float h0 = hcenter - (float)oheight / 2; // out height offset in input
float w0 = wcenter - (float)owidth / 2; // out width offset in input
float h1 = hcenter + (float)oheight / 2;
float w1 = wcenter + (float)owidth / 2;
int gh0 = (int)std::max(0, (int)MIN(im.dim(dh), h0)); // input h offset
int gw0 = (int)std::max(0, (int)MIN(im.dim(dw), w0)); // input w offset
int gh1 = (int)std::max(0, (int)MIN(im.dim(dh), h1));
int gw1 = (int)std::max(0, (int)MIN(im.dim(dw), w1));
int h = gh1 - gh0 + std::max(0, -r.h0); // out height narrow
int w = gw1 - gw0 + std::max(0, -r.w0); // out width narrow
int fh0 = (int)std::max(0, (int)(gh0 - h0)); // out height offset narrow
int fw0 = (int)std::max(0, (int)(gw0 - w0)); // out width offset narrow
// narrow original image
int hmin = std::max(0, std::min((int)res.dim(dh) - fh0,
std::min((int)im.dim(dh) - gh0, h)));
int wmin = std::max(0, std::min((int)res.dim(dw) - fw0,
std::min((int)im.dim(dw) - gw0, w)));
// clear result image
idx_clear(res);
if (hmin != 0 && wmin != 0) // only copy if overlap with image
{
idx<T> tmpim = im.narrow(dh, hmin, gh0);
tmpim = tmpim.narrow(dw, wmin, gw0);
// narrow target image
idx<T> tmpres = res.narrow(dh, hmin, fh0);
tmpres = tmpres.narrow(dw, wmin, fw0);
// copy original to target
idx_copy(tmpim, tmpres);
}
// set cropped rectangle to region in the output image containing input
if (cropped)
{
cropped->h0 = fh0;
cropped->w0 = fw0;
cropped->height = hmin;
cropped->width = wmin;
}
return res;
}
示例3: image_paste_center
void image_paste_center(idx<T> &in, idx<T> &out) {
if (in.order() != 3 || out.order() != 3)
eblerror("expected 3d idx but got " << in << " and " << out);
int d0 = 1;
int d1 = d0 + 1;
intg ci = in.dim(d0) - out.dim(d0);
intg cj = in.dim(d1) - out.dim(d1);
intg xci = (int) (ci / 2);
intg xcj = (int) (cj / 2);
idx<T> i = in.narrow(d0, out.dim(d0), xci);
i = i.narrow(d1, out.dim(d1), xcj);
idx_copy(i, out);
}
示例4: mirror
void padder<T>::pad(idx<T> &in, idx<T> &out) {
// allocate padded buffer
idxdim d = in;
d.setdim(1, d.dim(1) + nrow + nrow2);
d.setdim(2, d.dim(2) + ncol + ncol2);
if (out.get_idxdim() != d)
out.resize(d);
idx_clear(out);
// copy in to padded buffer
idx<T> tmp = out.narrow(1, in.dim(1), nrow);
tmp = tmp.narrow(2, in.dim(2), ncol);
idx_copy(in, tmp);
if (bmirror)
mirror(in, out);
}
示例5: draw_layer
unsigned int draw_layer(idx<float> &layer, const char *s,
unsigned int h, unsigned int w) {
#ifdef __GUI__
draw_matrix(layer, s, h, w, 1.0, 1.0, (float)-1.0, (float)1.0);
#endif
return layer.dim(1) + 3;
}
示例6: out
idx<T> padder<T>::pad(idx<T> &in) {
// allocate padded buffer
idxdim d = in;
d.setdim(1, d.dim(1) + nrow + nrow2);
d.setdim(2, d.dim(2) + ncol + ncol2);
idx<T> out(d);
idx_clear(out);
// copy in to padded buffer
idx<T> tmp = out.narrow(1, in.dim(1), nrow);
tmp = tmp.narrow(2, in.dim(2), ncol);
idx_copy(in, tmp);
if (bmirror)
mirror(in, out);
// return result
return out;
}
示例7: display_images
// display original and new images.
void display_images(idx<ubyte> &classes, int label, idx<float> &original,
idx<float> &new_images, const int channels_mode,
idx<ubyte> &ds_names, int current_ds) {
#ifdef __GUI__
unsigned int h = 0, w = 0;
static unsigned int cnt = 0;
idx<float> layer;
// only display every 15 images
if (cnt++ % 15 != 0) return ;
// reset window and do a batch display
disable_window_updates();
clear_window();
// original image (RGB)
static string s;
s = "RGB"; s += " - "; s += (char *) classes[label].idx_ptr();
draw_matrix(original, s.c_str(), h, w);
w = 0; h += new_images.dim(1) + 5;
gui << at(h, w) << black_on_white();
gui << ds_names[current_ds].idx_ptr() << " dataset:";
h += 15;
// new images
idx_bloop1(image, new_images, float) {
switch (channels_mode) {
case 1: // YpUV
w += draw_layer(image, 2, 0, "Yp", h, w);
w += draw_layer(image, 2, 1, "U", h, w);
w += draw_layer(image, 2, 2, "V", h, w);
break ;
case 3: // Yp
w += draw_layer(image, 2, 0, "Yp", h, w);
break ;
case 4: { // YpH3
w += draw_layer(image, 2, 0, "Yp", h, w);
w += draw_layer(image, 2, 1, "H3", h, w);
idx_addc(layer, (float)1.0, layer);
idx_dotc(layer, (float)210.0, layer);
w += layer.dim(1) + 5;
static idx<float> rgb(layer.dim(0), layer.dim(1), 3);
h3_to_rgb(layer, rgb);
draw_matrix(rgb, "H3 (colored)", h, w);
break ;
}
case 5: // VpH2SV
w += draw_layer(image, 2, 0, "Vp", h, w);
w += draw_layer(image, 2, 1, "H1", h, w);
w += draw_layer(image, 2, 2, "H2", h, w);
w += draw_layer(image, 2, 3, "S", h, w);
w += draw_layer(image, 2, 4, "V", h, w);
w = 0; h += image.dim(1) + 5;
break ;
}
}
enable_window_updates();
#endif
}
示例8: draw_layer
unsigned int draw_layer(idx<float> &img, int dimn, int layern, const char *s,
unsigned int h, unsigned int w) {
#ifdef __GUI__
idx<float> layer = img.select(dimn, layern);
draw_matrix(layer, s, h, w, 1.0, 1.0, (float)-1.0, (float)1.0);
#endif
return img.dim(1) + 3;
}
示例9: pairs
//! Return an idx of dimensions Nx2 containing all possible N similar pairs.
idx<int> make_pairs(idx<int> &labels) {
// allocate maximum number of pairs
idx<int> pairs((labels.dim(0) * (labels.dim(0) - 1)) / 2, 2);
int n = 0, r = 0;
// for each label, loop over all following labels to find pairs
for (int i = 0; i < labels.dim(0) - 1; ++i) {
for (int j = i + 1; j < labels.dim(0); ++j) {
if (labels.get(i) == labels.get(j)) {
r = drand(0.0, 1.0); // randomize distribution as 1st or 2nd element
pairs.set(i, n, (r > 0.5) ? 0 : 1);
pairs.set(j, n, (r > 0.5) ? 1 : 0);
n++;
}
}
}
pairs.resize(n, pairs.dim(1));
return pairs;
}
示例10: serialize
void serialize(Archive & ar, idx<ubyte>& mat, const unsigned int version) {
intg d1, d2, d3;
if (Archive::is_saving::value) { // saving to stream
if (!mat.contiguousp())
eblerror("expected contiguous idx for serialization");
if (mat.order() != 3)
eblerror("no support for idx order != 3 for now, got: " << mat);
d1 = mat.dim(0);
d2 = mat.dim(1);
d3 = mat.dim(2);
ar & d1;
ar & d2;
ar & d3;
idx_aloop1(m, mat, ubyte) {
ar & *m;
}
} else { // loading from stream
示例11: targets
cost_module<T1,T2,Tstate1,Tstate2>::cost_module(idx<T1> &targets_)
: targets(targets_), in2(targets.select(0, 0)), energies(targets_.dim(0)) {
}
示例12: display
int display(list<string>::iterator &ifname,
bool signd, bool load, list<string> *mats) {
//cout << "displaying " << ifname->c_str() << endl;
// conf mode
if (conf)
return display_net<T>(ifname, signd, load, mats);
// mat mode
if (is_matrix(ifname->c_str())) {
idxdim d = get_matrix_dims(ifname->c_str());
if (interleaved)
d.shift_dim(0, 2);
if (save_individually || print
|| !(d.order() == 2 || (d.order() == 3 &&
(d.dim(2) == 1 || d.dim(2) == 3)))) {
// this is probably not an image, just display info and print matrix
string type;
get_matrix_type(ifname->c_str(), type);
idx<T> m = load_matrix<T>(ifname->c_str());
cout << "Matrix " << ifname->c_str() << " is of type " << type
<< " with dimensions " << d << " (min " << idx_min(m)
<< ", max " << idx_max(m) << ", mean " << idx_mean(m)
<< "):" << endl;
m.print();
if (has_multiple_matrices(ifname->c_str())) {
midx<T> ms = load_matrices<T>(ifname->c_str(), true);
// saving sub-matrices
if (save_individually) {
cout << "Saving each sub-matrix of " << *ifname << " individually..."
<< endl;
save_matrices_individually(ms, *ifname, true);
}
// printing sub-matrices
cout << "This file contains " << m << " matrices: ";
if (ms.order() == 1) {
for (intg i = 0; i < ms.dim(0); ++i) {
idx<T> tmp = ms.mget(i);
cout << tmp.info() << " ";
}
} else if (ms.order() == 2) {
for (intg i = 0; i < ms.dim(0); ++i) {
for (intg j = 0; j < ms.dim(1); ++j) {
idx<T> tmp = ms.mget(i, j);
cout << tmp.info() << " ";
}
cout << endl;
}
}
cout << endl;
} else
cout << "This is a single-matrix file." << endl;
return 0;
}
}
// image mode
int loaded = 0;
static idx<T> mat;
uint h = 0, w = 0, rowh = 0, maxh = 0;
list<string>::iterator fname = ifname;
#ifdef __GUI__
disable_window_updates();
clear_window();
if (show_filename) {
gui << at(h, w) << black_on_white() << ifname->c_str();
h += 16;
}
#endif
maxh = h;
for (uint i = 0; i < nh; ++i) {
rowh = maxh;
for (uint j = 0; j < nw; ++j) {
if (fname == mats->end())
fname = mats->begin();
try {
// if (load)
mat = load_image<T>(*fname);
if (print)
cout << *fname << ": " << mat << endl << mat.str() << endl;
// show only some channels
if (chans >= 0)
mat = mat.select(2, chans);
loaded++;
maxh = (std::max)(maxh, (uint) (rowh + mat.dim(0)));
T min = 0, max = 0;
#ifdef __GUI__
if (autorange || signd) {
if (autorange) {
min = idx_min(mat);
max = idx_max(mat);
} else if (signd) {
T matmin = idx_min(mat);
if ((double)matmin < 0) {
min = -1;
max = -1;
}
}
draw_matrix(mat, rowh, w, zoom, zoom, min, max);
} else
draw_matrix(mat, rowh, w, zoom, zoom, (T) range[0], (T) range[1]);
#endif
w += mat.dim(1) + 1;
//.........这里部分代码省略.........
示例13: convert_image
// convert the input image <src> into the <channels_mode> format.
void convert_image(idx<float> &src, idx<float> &dst, const int channels_mode,
unsigned int fkernel_size) {
idxdim d = idxdim(src), d2 = idxdim(src);
d2.setdim(2, dst.dim(2));
idx<float> in, out, src2(d), tmp(d2), tmp2;
if (fkernel_size > 0) {
src2 = src.narrow(0, src.dim(0) - fkernel_size + 1,
floor(fkernel_size / 2));
src2 = src2.narrow(1, src.dim(1) - fkernel_size + 1,
floor(fkernel_size / 2));
tmp2 = tmp.narrow(0, tmp.dim(0) - fkernel_size + 1,
floor(fkernel_size / 2));
tmp2 = tmp2.narrow(1, tmp.dim(1) - fkernel_size + 1,
floor(fkernel_size / 2));
}
idx_clear(dst);
// narrow dst to fit src if smaller
if (src2.dim(0) < dst.dim(0))
dst = dst.narrow(0, src2.dim(0), floor((dst.dim(0) - src2.dim(0)) / 2));
if (src2.dim(1) < dst.dim(1))
dst = dst.narrow(1, src2.dim(1), floor((dst.dim(1) - src2.dim(1)) / 2));
// converting
switch (channels_mode) {
case 0: // RGB
idx_copy(src2, dst);
image_global_normalization(dst);
break ;
case 1: // YUV
rgb_to_yuv(src, tmp);
in = tmp.select(2, 0);
d = idxdim(in);
out = idx<float>(d);
image_mexican_filter(in, out, 6, fkernel_size);
idx_copy(out, in);
idx_copy(tmp2, dst);
image_global_normalization(dst);
break ;
case 3: { // Y only
rgb_to_y(src, tmp);
in = tmp.select(2, 0);
d = idxdim(in);
out = idx<float>(d);
image_global_normalization(in);
image_local_normalization(in, out, fkernel_size);
idx_copy(out, in);
idx_copy(tmp2, dst);
}
break ;
case 4: // YH3
rgb_to_yh3(src, tmp);
in = tmp.select(2, 0);
d = idxdim(in);
out = idx<float>(d);
image_mexican_filter(in, out, 6, fkernel_size);
image_global_normalization(out);
idx_copy(out, in);
idx_copy(tmp2, dst);
break ;
case 5: // VpH2SV
rgb_to_vph2sv(src, tmp, 6, fkernel_size);
idx_copy(tmp2, dst);
break ;
default:
cerr << "unknown channel mode: " << channels_mode << endl;
eblerror("unknown channel mode");
}
}
示例14: process_dir
//! Recursively goes through dir, looking for files matching extension ext.
void process_dir(const char *dir, const char *ext, const char* leftp,
const char *rightp, unsigned int width,
unsigned int fwidth, idx<float> &images,
idx<int> &labels, int label, bool silent, bool display,
bool *binocular,
const int channels_mode, const int channels_size,
idx<ubyte> &classes, unsigned int &counter,
idx<unsigned int> &counters_used, idx<int> &ds_assignment,
unsigned int fkernel_size, int deformations,
idx<int> &deformid, int &ndefid,
idx<ubyte> &ds_names) {
regex eExt(ext);
string el(".*");
idx<float> limg(1, 1, 1);
idx<float> rimg(1, 1, 1);
idx<float> tmp, left_images;
idx<int> current_labels;
idx<int> current_deformid;
idx<float> tmp2;
int current_ds;
unsigned int current_used;
if (leftp) {
el += leftp;
el += ".*";
}
regex eLeft(el);
cmatch what;
path p(dir);
if (!exists(p))
return ;
directory_iterator end_itr; // default construction yields past-the-end
for (directory_iterator itr(p); itr != end_itr; ++itr) {
if (is_directory(itr->status())) {
process_dir(itr->path().string().c_str(), ext, leftp, rightp, width,
fwidth, images, labels, label, silent, display, binocular,
channels_mode, channels_size, classes, counter,
counters_used, ds_assignment, fkernel_size, deformations,
deformid, ndefid, ds_names);
} else if (regex_match(itr->leaf().c_str(), what, eExt)) {
if (regex_match(itr->leaf().c_str(), what, eLeft)) {
current_ds = ds_assignment.get(counter);
if (current_ds != -1) {
current_used = counters_used.get(current_ds);
// found left image
// increase example number
labels.set(label, current_ds, counters_used.get(current_ds));
// check for right image
if (rightp != NULL) {
regex reg(leftp);
string rp(rightp);
string s = regex_replace(itr->leaf(), reg, rp);
string sfull = itr->path().branch_path().string();
sfull += "/";
sfull += s;
path r(sfull);
if (exists(r)) {
// found right image
*binocular = true;
if (image_read_rgbx(r.string().c_str(), rimg)) {
// resize stereo dimension to twice the channels_size
if (images.dim(3) == channels_size)
images.resize(images.dim(0), images.dim(1),
images.dim(2), images.dim(3) * 2);
// take the right most square of the image
if (rimg.dim(0) <= rimg.dim(1))
rimg = rimg.narrow(1, rimg.dim(0),
rimg.dim(1) - rimg.dim(0));
else
rimg = rimg.narrow(0, rimg.dim(1),
rimg.dim(0) - rimg.dim(1));
// resize image to target width
rimg = image_resize(rimg, width, width, 1);
tmp = images[current_ds];
tmp = tmp[counters_used.get(current_ds)];
tmp = tmp.narrow(2, channels_size, channels_size);
// finally copy right images to idx
convert_image(rimg, tmp, channels_mode, fkernel_size);
}
if (!silent)
cout << "Processing (right): " << sfull << endl;
}
}
if (!silent) {
cout << counter << "/" << ds_assignment.dim(0) << ": ";
cout << itr->path().string().c_str() << endl;
}
// process left image
if (image_read_rgbx(itr->path().string().c_str(), limg)) {
// take the left most square of the image
int h = limg.dim(0), w = limg.dim(1), newh, neww;
if (h > w) {
newh = width;
neww = (newh / (float) h) * w;
} else {
neww = width;
newh = (neww / (float) w) * h;
}
// resize image to target width
limg = image_resize(limg, neww, newh, 1);
//.........这里部分代码省略.........