Skip to content

Instantly share code, notes, and snippets.

@ferryzhou
ferryzhou / github_repos_bigquery.sql
Last active August 29, 2015 14:08
get github repo details from bigquery
select repository_url, repository_language, repository_created_at, repository_description, MAX(repository_watchers) as watches
from [githubarchive:github.timeline]
where repository_watchers > 20
group each by repository_url, repository_language, repository_created_at, repository_description
order by watches desc
@ferryzhou
ferryzhou / init_with_hash.rb
Created August 14, 2014 21:30
Ruby Class Initialize with Hash Arguments
def initialize(args = {})
defaults = {
:file_list_cache_dir => 'cache/filelists/',
:img_root => 'cache/img/',
:sensor_res_img_root => 'cache/srimg/'
}
defaults.merge(args).each do |attr, val|
instance_variable_set("@#{attr}", val) if defaults.has_key?(attr) && (not val.nil?)
end if args
setup
@ferryzhou
ferryzhou / opencv_copy_patch.c
Last active April 9, 2017 20:43
opencv extract and copy patch from a Mat or image
// nY(dst_r_from + (0:rows-1), dst_c_from + (0:cols-1), :) = YY(src_r_from + (0:rows-1), src_c_from + (0:cols-1), :);
void copy_patch(Mat& nY, const Mat& YY, int dst_r_from, int dst_c_from, int src_r_from, int src_c_from, int rows, int cols) {
int row_bytes = cols * YY.channels() * YY.elemSize1();
const uchar* pYY = (const uchar*)YY.data + YY.step[0] * src_r_from + YY.step[1] * src_c_from;
uchar* pnY = (uchar*)nY.data + nY.step[0] * dst_r_from + nY.step[1] * dst_c_from;
for (int i = 0; i < rows; i++, pnY += nY.step[0], pYY += YY.step[0]) {
memcpy(pnY, pYY, row_bytes);
}
}
@ferryzhou
ferryzhou / mex_show_sparse.cpp
Created March 19, 2013 21:10
show sparse matrix in mex file
#include "mex.h"
// undef needed for LCC compiler
#undef EXTERN_C
// mex mex_show_sparse.cpp -O -largeArrayDims
// a = sparse(rand(10)<0.1)
// mex_show_sparse(a);
// b = a .* rand(10)
// mex_show_sparse(b);
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
@ferryzhou
ferryzhou / concatenate_binary_files.rb
Created February 7, 2013 20:46
concatenate binary files with ruby
# given a directory or a set of files
# concatenate the binary files
# output a single binary file
# usage:
# ruby concatenate_binary_files "/xxx/xx/*.bin" "/xxx/xx.bin"
infiles = ARGV[0]
outpath = ARGV[1]
File.open(outpath, 'wb') do |outfile|
@ferryzhou
ferryzhou / nextpow2.c
Created January 29, 2013 15:41
next power of 2
int nextpow2 (int x) {
if (x < 0)
return 0;
--x;
x |= x >> 1;
x |= x >> 2;
x |= x >> 4;
x |= x >> 8;
x |= x >> 16;
return x+1;
@ferryzhou
ferryzhou / get_local_maxima.m
Created December 18, 2012 21:21
get maxima of a gray scale image
function [I, J, xvals] = get_local_maxima(imcor, radius)
% a = rand(10);
% [I, J, xvals] = get_local_maxima(a, 3);
% figure, imagesc(a); hold on; scatter(J, I);
[m, n] = size(imcor);
nim = ones(m + radius * 2, n + radius * 2) * 1e-10;
nim(radius + (1:m), radius + (1:n)) = imcor;
cols = im2col(nim, [2*radius + 1, 2 * radius + 1], 'sliding');
@ferryzhou
ferryzhou / init_option.m
Created May 3, 2012 14:37
Initialize variable based on options from input
function val = init_option(options, name, default_val)
% usage lamda = init_option(options, 'lamda', 0.01);
if isfield(options, name), val = options.(name); else val = default_val; end
end
@ferryzhou
ferryzhou / get_threshold.m
Created April 16, 2012 18:19
Automatically generate a threshold for a vector. Can be used to filter out noise.
function t = get_threshold(v)
% pitch the lowest 20%
[m, inds] = sort(v);
P = fix(0.2 * length(v));
nt = m(P);
P = fix(0.8 * length(v));
nt2 = m(P);
@ferryzhou
ferryzhou / align.m
Created April 16, 2012 14:50
Align two signals using correlation
function [ao, bo, offset, y] = align(a, b)
% align two signals a and b
% ao and bo are aligned ones with same length
% y is the correlation xcorr(a, b)
% a_ind + offset -> b_ind
% if offset >= 0, cut a, else cut b
an = length(a); bn = length(b);
N = max(an, bn);