|
CSE Home | About Us | Search | Contact Info |
<back to spatially variant non-blind deconvolution> |
Loading and Saving the Blur Matrix in the .skl format |
The blur matrix, K, for an image of size n pixels is an nXn matrix where each row corresponds to the vectorized blur kernel for that particular pixel of the vectorized image. The blurred image is the result of multiplying a vectorized form of the latent image, L, with K. This is commonly written as - |
B = K L |
where K is the blur matrix, L is the latent image and B is the blurred image. |
The matrix K is very sparse since the size of the blur kernel is quite small compared to the image. For our non-blind deconvolution executable, we assume that the matrix has been stored in a special format which we now explain. |
Representation of a sparse matrix |
We define two structures which store the sparse blur matrix. |
/*
* mData
* - size = number of non-zero entries
* - linear array which stores the
non-zero entries of the matrix in a row-major order.
* columns
* - size = number of non-zero entries
* - columns(i) = column in which the
i'th element of mData occurs in the matrix.
* rowIndex
* - size = number of rows + 1.
* - rowIndex(i) = The position of the
first non-zero element in the i'th row of the matrix in the mData array. The
last element of this array is (number of non-zero entries)+1.
*/
|
typedef struct tag_SPARSE_MATRIX_STRUCT {
int eleNum; // number of non-zero
entries
int rowNum; // number of rows
int colNum; // number of columns
double * mData;
int * columns;
int * rowIndex;
} SparseMatrix;
|
typedef struct tag_SPATIALLY_VARIANT_SPARSE_
int imWidth;
int imHeight;
int kw;
int kh;
SparseMatrix sparseKernelMatrix;
} SpvKernelSparse;
|
An example matrix written in this format is shown in the figure below: |
Sparse matrix: |
[ 1 -1 0 -3 0
-2 5 0 0 0 0 0 4 6 4 -4 0 2 7 0 0 8 0 0 -5 ] |
Representation: |
eleNum = 13 |
rowNum = 5 |
colNum = 5 |
mData = [1; -1; -3; -2; 5; 4; 6; 4; -4; 2; 7; 8; -5] |
columns = [1; 2; 4; 1; 2; 3; 4; 5; 1; 3; 4; 2; 5] |
rowIndex = [1; 4; 6; 9; 12; 14] |
The following is a wrapper structure to use the above sparse matrix in the deconvolution framework. |
typedef struct tag_SPATIALLY_VARIANT_SPARSE_
int imWidth; // image width
int imHeight; // image height
int kw; // max blur kernel width
(approximate measure)
int kh; // max blur kernel height
(approximate measure)
SparseMatrix sparseKernelMatrix;
} SpvKernelSparse;
|
File format |
We provide here two functions in C++ to save and load the SpvKernelSparse object to and from binary files. Basically, for saving the object, the code just writes all the values in the structure sequentially as a binary file and loads accordingly. In case you want to write your own code, please use the code snippets as reference. |
<Link to the code snippets> |
Computer Science & Engineeringg Box 352350, University of Washington Seattle, WA 98195-2350 (206) 543-1695 [comments to Qi Shan] Privacy policy and terms of use |