Code covered by the BSD License  

Highlights from
fillgaps in an array/matrix/image

Be the first to rate this file! 4 Downloads (last 30 days) File Size: 3.32 KB File ID: #37479
image thumbnail

fillgaps in an array/matrix/image

by

 

Fill gaps in a cell-array/vector/matrix or image based on an alternative cell/vector/matrix/image

| Watch this File

File Information
Description

Objective: This code is useful when there is two or more versions of data
for the same dates or spatial points or images where each version has
some gaps in certain fields that are crucial for the analysis. The
objective is to fill the gaps in the best version (or any version if no
preferance), using corresponding values in the alternative versions.

The function accepts a cell-array (or matrix), and replaces NaN values
of certain fields of it with available values of the second or more given
reference cell-arrays (or matrixes). Both cell-arrays and matrixes are
accepted as target and reference(s).
The first two arguments are the target and reference
cell-arrays/matrices, the third argument provides index(es) of fields
where NaNs should be replaced (target and reference cell-arrays/matrices
should have similar fields). More reference cell-arrays/matrices/images
can be given as arbitrary arguments. If the values to be replaced in
target cell-array/matrix are NaNs in the first refenece, the extra
references (if available) will also be checked. If non of the references
have valid value for a NaN record in the target, the returned
cell-array/matrix will be still NaN (no change) for that record. As a
rule, NaNs will be replaced with the available non-NaN values from the
first reference cell-array(s)/matrices.
For images where NaNs or missing data are spread all over the image, all
columns (1:length(cols)) can be given so that the entire image is
repaired based on the available reference image(s). Note that the
function works with doubles, so if the input image is in a bit-scale
(such as 8-bit or any unint), the input first should be turned to double.
If the missing data in the image are, for example, 0, they can be turned
to NaN before calling the function.

Inputs:
  target: target cell-array (or matirx)
  refarray: reference cell-array (or matirx)
  fields2fill: index or indexes of fields where NaNs should be replaced;
  it can be only single index or a set of indices.
  varargin: one or more extra reference cell-array(s)/matrices.
Outputs:
  combined_data: same as target input cell-array/matrix with gaps for the
  requested field(s) filled using corresponding field(s) in the reference
  cell-arrays/matrices (refarray and extra references if available).
  data: a cell-array where the input target and reference cell-arrays
  or matrices are stored (can be used to compare data before and after
  filling the gaps).
If the input target was cell-array, the output result (combined_data)
will be also cell-array, if the target was a matrix, the result will be
also a matrix. The second output will always be a cell-array of
cell-array elements.

Example:
target=[3 4 NaN 4; 2.4 5 6.1 7; 10 11 1.1 NaN; 0.1 3 2 8];
refarray=[4 2 30 4; 8 7 9 2; 4 5 12 24; 9 8 2 23];
fields2fill=[3 4];
[combined_data,data] = fillgaps(target,refarray,fields2fill)
combined_data =
    3.0000 4.0000 30.0000 4.0000
    2.4000 5.0000 6.1000 7.0000
   10.0000 11.0000 1.1000 24.0000
    0.1000 3.0000 2.0000 8.0000
data =
    {4x4 cell} {4x4 cell}

Example for image input:

im=imread('NZ.jpg'); %or any 3-band image
b1=double(im(:,:,1)); %single out band 1 (red)
b2=double(im(:,:,2)); %single out band 2 (green)
b1=b1-min(b1(:)); b2=b2-min(b2(:)); %enhance contract by removing bg haze
xidx=randi(400,12); %propogate random noise along lines
yidx=randi(250,12); %propogate random noise along columns
b1(xidx,yidx)=NaN; %assign NaN to random points of b1
% call func to fill NaNs of b1 using b2 as reference:
[b_repaired,data] = fillgaps(b1,b2,1:300);
% compare the results:
subplot(1,2,1), imshow(b1,[min(b1(:)) max(b1(:))]);
title('band1 with holes'), set(gca,'FontWeight','bold','FontSize',16);
subplot(1,2,2), imshow(b_repaired,[min(b1(:)) max(b1(:))]);
title('band1 with holes filled');
set(gca,'FontWeight','bold','FontSize',16);

First version: 04 June 2012
Updated: 09 June 2012 and 12 Jul 2012

Required Products MATLAB
MATLAB release MATLAB 7.7 (R2008b)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.

Contact us