hts_code
所属分类:matlab编程
开发工具:matlab
文件大小:43KB
下载次数:14
上传日期:2009-03-19 17:21:07
上 传 者:
raje
说明: histogram based code for image retrival
文件列表:
errorimage.m (3889, 2003-05-17)
buildalphamask.m (2670, 2003-05-17)
buildimagemask.m (2764, 2003-05-17)
buildtraversalmap.m (4558, 2003-05-17)
circshiftpatch.m (2271, 2003-05-17)
build_knn.m (6327, 2003-06-19)
errorimage_dst.m (4426, 2003-05-17)
errorimage_sqdiff.m (5444, 2003-05-17)
errorimage_src.m (3873, 2003-05-17)
errorimage_sum.m (4794, 2003-05-17)
errorsurface.m (2994, 2003-05-17)
frequencymap.m (2972, 2003-05-24)
gen_input.m (7841, 2003-06-19)
genquadmeshoffset.m (4100, 2003-06-19)
gentoroidalquadmeshoffset.m (6067, 2003-06-19)
gray2rgb.m (1505, 2003-05-17)
hybridsynthesize.m (9107, 2003-05-20)
hybridsynthesizerec.m (20158, 2003-05-24)
overlap_resynthesis_exh.m (7626, 2003-09-16)
overlap_resynthesis_knn.m (11406, 2003-06-19)
|-----------------------------------------------------------------------|
| Hybrid Texture Synthesis MATLAB package |
| |
| Date: 05/19/2003 |
| |
| Author: Andrew Nealen |
| Discrete Geometric Modeling Group |
| Technische Universitaet Darmstadt, Germany |
| |
| Note: This is part of the prototype MATLAB implementation |
| accompanying our paper/my thesis |
| |
| Hybrid Texture Synthesis. A. Nealen and M. Alexa |
| Eurographics Symposium on Rendering 2003 |
| |
| Hybrid Texture Synthesis. A. Nealen |
| Diplomarbeit (MSc), TU Darmstadt, 2003 |
| |
| See the paper/thesis for further details. |
|-----------------------------------------------------------------------|
1. Introduction
---------------
What follows is a brief description on the intended usage of our
prototype MATLAB implementation of Hybrid Texture Synthesis. Please
note, that this is NON OPTIMIZED RESEARCH CODE! We have tried to keep
all comments in the code consistent, yet there still my be the one or
other misleading comment and/or badly named variable. All development
was carried out using MATLAB version 6.1.
Requirements:
-------------
- Matlab 6.1
- Image processing toolkit
- Optional: OpenTSTools Matlab package for use of build_knn.m.
available under the GPL from http://www.physik3.gwdg.de/tstool/.
2. Files
--------
This package contains the following .m files.
build_knn.m - builds an optional k-nearest
neighbors datastructure for
k-coherence search
buildalphamask.m - constructs the alpha-mask for boundary
feathering
buildimagemask.m - constructs the image mask used for
best patch search
buildtraversalmap.m - constructs the traversal map for
overlap re-synthesis
circshiftpatch.m - circular shift of a geometrically
defined patch
errorimage.m - constructs the errorimage for a
given mask and input texture
errorimage_dst.m - destination importance map weighted
error image
errorimage_sqdiff.m - src/dst squared difference
importance map weighted error image
errorimage_src.m - source importance map weighted
error image
errorimage_sum.m - src/dst sum importance map
weighted error image
errorsurface.m - computes the error surface
frequencymap.m - a frequency map in [0.2,1]
gen_input.m - generates input to hybridsynthesize.m
genquadmeshoffset.m - generates a 2D quad-mesh
gentoroidalquadmeshoffset.m - generates a toroidal, 2D quad-mesh
gray2rgb.m - simple image conversion
hybridsynthesize.m - the wrapper function for
hybridsynthesizerec.m
hybridsynthesizerec.m - the main algorithm
overlap_resynthesis_exh.m - exhaustive O(kNlogN) per-pixel
re-synthesis
overlap_resynthesis_knn.m - k-coherence O(rkn) per-pixel re-synthesis
Copy all the files in the zip archive to a path where Matlab can find them.
3. Basic usage notes
--------------------
We generally start off by constructing a k-nearest neighbors (knn)
datastructure from an input texture, which, depending on the
texture size, chosen neighborhood size, and variation in the
texture, can take a while. As we can save this structure to a .mat
file for future use, it generally pays off. NOTE: you will need to
have the OpenTSTools MATLAB package installed to use
build_knn.m, available under the GPL from
http://www.physik3.gwdg.de/tstool/.
Otherwise just perform exhaustive search (see further below).
On to the MATLAB command line:
>
> T = imread('my_cool_texture.tif'); % load a texture
> [knn,dist] = build_knn(T,3,10); % 7x7 neighborhood, k = 10 (knn)
> save knn_for_cool_texture knn dist % save the knn/dist information
>
All other necessary texture information is held in a 'data' structure,
which is generated using gen_input.m (type 'help gen_input' for more
on how to modify the switches of the algorithm).
>
> data = gen_input(T,256,256,0,1,'nowrap',0.02,0.04,32,32,'simple');
>
So we want to generate a 256x256 texture with no error tolerance,
feathering enabled, no wrapping of the input texture, 0.02 pixel tolerance,
0.04 patch tolerance, an initial patch size of 32x32, and the simple
distance metric for overlapping patches. All other necessary values
are set to defaults. The structure generated by gen_input can and
should be modified to one's liking. See the comments in the .m files
and the paper/thesis for a more detailed description.
So, finally, we want (fast, k-coherence search) RESULTS:
>
> I = hybridsynthesize(data, 7, knn);
>
Or optionally, perform an exhaustive per-pixel search
>
> I = hybridsynthesize(data, 7);
>
In both cases we use an initial pixel overlap for patch placement of 7
pixels. Using a value somewhere around patch_cornerlength/6 seems
resonable, but can strongly vary from texture to texure. Experimentation
is key.
4. Special cases
----------------
'Patch Based Sampling' (PBS) and 'Non-parametric Sampling' (NPS) are
special cases of 'Hybrid Texture Synthesis' and can be mimicked with
the following input data:
PBS (patch_delta_max = pixel_delta_max = 1.0)
>
> data = gen_input(T,256,256,0.01,1,'nowrap',1.0,1.0,32,32,'simple');
> I = hybridsynthesize(data, 6); & uses a 6 pixel overlap (= 32/6)
>
NPS (no feathering, single pixel grid)
>
> data = gen_input(T,256,256,0.01,0,'nowrap',1,0,1,1,'simple');
> I = hybridsynthesize(data, 4); & uses a 9x9 neighborhood
>
5. Settings
-----------
In many values in 'data' can and should be modified. by typing
>
> data = gen_input(...);
> data.VARIABLE = VALUE;
>
the VALUE of VARIABLE can be changed. Here the list of variables/meanings:
VARIABLE MEANING
rows / cols pixels rows/columns in result.
errtol candidate-patch-set error tolerance in [0,1]
0 selects only best match, 1 selects randomly.
example: setting patch_delta_max = 1 and errtol = 1
results in random patch placement with no splits.
feather binary value. set to 0/1 to disable/enable
overlap feathering
mode wrapping of input texture. possible
strings: 'wrap', 'nowrap',
pixel_delta_max pixel error tolerance.
patch_delta_max} patch error tolerance.
psr / psc pixels rows/columns per patch in the initial grid
metric patch selection metric. possible
strings: 'simple', 'src', 'dst', 'sum', 'sqdiff'.
exh_overlap / pixel strip around target pixel for exhaustive /
knn_overlap k-coherence search during overlap re-synthesis.
results in a nxn neighborhood with n=2*overlap+1.
k the 'k' in k-coherence search. defaults to 5.
min_patchsize smallest allowed patch size in pixels. default is 8.
display_resynthesis set to 0 to disable algorithm visualization.
verbatim set to 1 for some command line output.
6. Contact
----------
I will gladly answer any questions concerning the basic algorithm.
I am aware, that some of the loops in this code could be tightened/
vectorized, yet i didn't find the time to do so. It is just meant
as a prototype in any case, and MATLAB is great for this task! You
can reach me at
andy@nealen.com
7. Disclaimer
-------------
Repeating myself here... This is research/prototype code. We will take
no responsibility concerning its use by others and simply published it
to give better insight to the inner workings of the algorithm.
Other than that, have fun fiddling with it! and let me know
if you have any constructive comments/suggestions.
Cheers,
Andy
05/19/2003
__________________________________________________
Andrew Nealen
Discrete Geometric Modeling Group
Technische Universitaet Darmstadt, Germany
http://www.dgm.informatik.tu-darmstadt.de
http://www.nealen.com
andy@nealen.com
VERSION HISTORY
ver 1.00 = Released May 19th 2003
- Initial version
ver 1.01 = released September 16th 2003
- Removed a nasty bug in overlap_resynthesis_exh.m,
which only allowed for input textures with identical
width and height.
近期下载者:
相关文件:
收藏者: