You are now following this Submission
- You will see updates in your followed content feed
- You may receive emails, depending on your communication preferences
A Natural-Rule-Based-Connection (NRBC) Method
Share 'A Natural-Rule-Based-Connection (NRBC) Method'
A Natural-Rule-Based-Connection (NRBC) Method for River Network Extraction from High-Resolution Imagery
Usage example (For details, please view the demonstration_html):
[water_mask_orgin, Mask_connected, edge_list]=NRBC ('.\Test_Data\WaterMask.tif', '.\Test_Data\NDVI.tif');
Introduction of the water body detection software package (NRBC).
This is a group of Matlab functions to detect and connect water body from satellite/airborne imagery.
The entire task is broken down into several relatively independent tasks, with the most important part NRBC published and can be open accessed [Here] (http://www.mdpi.com/2072-4292/7/10/14055).
This code project implements the Step 2: [River_Patch_Connection]. Please see my other project for the other steps.
The overall river detection task is broken down as:
1. Unsupervised classification of satellite imagery: (here we are using 8 band original Worldview-2 imagery) With the unsupervised classification result, the water clusters (classes) are automatically/adaptively chosen from all classes.
--> [Viusalize_of_Centres] module is designed for this purpose
2. When a refined water body is achieved, we need to further connect river segments to form topologically correct/completed rivers. This is a complicated stage with many steps. A image pyramid is generated, and topology at top level (downsampled imagery) is then deliver to the bottom level (original resolution imagery) Many rules are applied to test the potential connect-able river segments., such as the river direction and width consistence between neighbouring river segments. finally the gap is filled if it is a successful/ connect-able case.
--> [River_Patch_Connection] module is designed for this task with many functions.
3. After a complete water body, with complete/correct rivers been connected, is generated, the centerline of the rivers are generated. An improved morphological method that first skin the water mask and then remove the spurs is used. An alternative method is using the MEANSHIFT method, which is also implemented.
--> [River_Centerline] module is implemented for this purpose.
4. The bridge can also be detected after water body detection: bridges are detected, and regularized as rectangles The main idea is find the river connected areas, as seed for potential bridge locations, and then use rule to remove incorrect case and process the correct case.
--> [Bridge_Detection] module is designed for this purpose.
There are some other isolated functions which are not used in this mainstream, but still quite useful for other applications. such as the Image pyramid construction, non-linear fitting of points, etc.
Removed section
5. After the water classes are selected, a coarse water mask is generated. within this water mask, there are some mistaken areas, such as shadows, to refine the result, a SAR (here we use the Radarsat-2 HH SLC image) image is used to refined the result We separate the water from non-water, by separating the overall histogram into two , and a threshold is set appropriate to distinguish water from non-water by Mean backscatter value in SAR imagery --> [Histogram_Separation] package is designed for this purpose
Note: this section is removed now.
Removed section
Please cite this work as:
Zeng, C.; Bird, S.; Luce, J.J.; Wang, J. A Natural-Rule-Based-Connection (NRBC) Method for River Network Extraction from High-Resolution Imagery. Remote Sens. 2015, 7, 14055-14078.
Note
This entire project is for research purpose thus did not well-test. They may be many issues/bugs when you run with own data, please report any problem or improvement suggestion to: chqzeng@gmail.com
Cite As
chuiqing (2024). A Natural-Rule-Based-Connection (NRBC) Method (https://github.com/chqzeng/NRBC), GitHub. Retrieved .
MATLAB Release Compatibility
Platform Compatibility
Windows macOS LinuxCommunity Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Discover Live Editor
Create scripts with code, output, and formatted text in a single executable document.
- cleanedgelist
- Closest_pt_in_8_Neigh
- curve_fitting_with_bspline
- dipstart.m
- edgelink
- Estimate_Centraline_Dir_Len
- Estimate_Patch_width
- ExportEdgelist2ShpFile
- Extend_Gap_CentralLine
- findendsjunctions
- Image_Morph_connection
- Image_Pyrimad
- Neighour_patch_Connection
- Neighour_patch_filled
- NRBC
- River_Patch_connection
- Search_centralline_Segment_by_seed
- Search_neighour_patch_by_seed
- show
- splinefit
DIPimage/common/dipimage
- afm_flatten
- aniso
- arcf
- arrangeslices
- array2im
- autocorrelation
- backgroundoffset
- bbox
- bclosing
- bdilation
- berosion
- bilateralf
- bmajority
- bopening
- bpropagation
- brmedgeobjs
- bskeleton
- cal_readnoise
- canny
- ced
- change_chroma
- change_gamma
- change_xyz
- chordlength
- clip
- closing
- closing_se
- color_rotation
- Contents.m
- convolve
- coord2image
- correctshift
- countingframe
- countneighbours
- cpf
- crosscorrelation
- curvature
- curvature_thirion
- cut
- dcc
- deblock.m
- deltaim
- derivative
- dethessian
- detile
- dgg
- dilation
- dilation_se
- dipaddpath
- dipanimate.m
- dipclf.m
- dipcrop.m
- dipdrawpolygon.m
- dipfig.m
- dipgetcoords.m
- dipgetimage.m
- dipgetpref
- diphist
- diphist2d
- dipinit.m
- dipisosurface.m
- diplink.m
- diplooking.m
- dipmapping.m
- dipmaxaspect.m
- dipmenus
- dipmex
- diporien.m
- dippan.m
- dipprofile.m
- dipprojection.m
- diproi
- dipsetpref
- dipshow.m
- dipstackinspect.m
- dipstep.m
- diptest.m
- diptruesize.m
- dipzoom.m
- dip_initialise
- dip_morph_flavour
- displaylabelnumbers
- dpr
- drawline
- drawpolygon
- dt.m
- dx
- dxx
- dxy
- dxz
- dy
- dyy
- dyz
- dz
- dzz
- entropy
- erfclip
- erosion
- erosion_se
- extend
- fillholes
- findlocalshift
- findlocmax
- findmaxima
- findminima
- findospeaks
- findshift
- find_lambda
- fmmatch
- frc
- ft
- gabor
- gabor_click
- gaussf
- gaussf_adap
- gaussf_adap_banana
- gaussianblob
- gaussianedgeclip
- gaussianlineclip
- gdt
- getbranchpixel
- getendpixel
- getlinkpixel
- getparams.m
- getsinglepixel
- get_subpixel
- gradientvector
- gradmag
- granulometry
- gvf
- hessian
- hist2image
- hist_equalize
- hitmiss
- hmaxima
- hminima
- ht
- huecorr
- hull
- hybridf
- ift
- im2array
- im2mat
- im2snake
- isophote_curvature
- iso_luminance_lines
- jacobi
- joinchannels
- jpeg_quality_score
- kuwahara
- label
- label
- laplace
- laplace_min_dgg
- laplace_plus_dgg
- lfmse
- luminance_steered_erosion
- luminance_steered_erosion
- lut
- mae
- make_gamut
- mappg
- mat2im
- maxf
- maxima
- mcd
- mdhistogram
- measure
- measurehelp
- measure_gamma_monitor
- medif
- minf
- minima
- mirror
- monitor_icc
- mon_rgb2xyz
- mon_xyz2rgb
- morphscales
- mre
- mse
- msr2ds
- msr_remap
- mutualinformation
- nconv
- newcolorim
- newim
- newimar
- noise
- noisestd
- opening
- opening_se
- opticflow
- orientation4d
- orientationplot
- orientationspace
- out_of_gamut
- overlay
- overlay_confidence
- overlay_vector
- paircorrelation
- percf
- percf_adap
- percf_adap_banana
- phiphi
- pmd
- pmd_gaussian
- prewittf
- printer_icc
- print_cmy2xyz
- print_xyz2cmy
- psnr
- pst
- quadraturetensor
- radialmax
- radialmean
- radialmin
- radialsum
- ramp
- ramp1
- rankmax_opening
- rankmax_opening_se
- rankmin_closing
- rankmin_closing_se
- readavi
- readim
- readrawim
- readroiim
- readtimeseries
- read_icc_profile.m
- rebin
- reconstruction
- relabel
- resample
- rgb_to_border
- rotation
- rr
- scale2rgb
- scalespace
- scanner_calibration
- scanner_icc
- scan_rgb2xyz
- scan_xyz2rgb
- selectionf
- setlabels
- shift
- slice_ex
- slice_ex
- slice_op
- smooth
- snake2im
- snakedraw
- snakeminimize
- sobelf
- spectra2xyz
- split
- ssim
- stretch
- structf
- structuretensor
- structuretensor3d
- subpixlocation
- subsample
- testobject
- tframehessian
- threshold
- tikhonovmiller
- tile
- tophat.m
- umbra.m
- unif
- varif
- vdt
- vfc
- view5d
- waterseed
- watershed
- wiener
- writeavi.m
- writedisplayavi
- writeim
- write_icc_profile
- xx
- xx1
- yy
- yy1
- zz
- zz1
DIPimage/common/dipimage/@dip_image
- abs
- acos
- all
- and
- angle
- any
- asin
- atan
- atan2
- besselj
- cat
- ceil
- circshift
- class
- colorspace
- complex
- conj
- convhull
- cos
- cross
- ctranspose
- curl
- datatype
- det
- diag
- dip_array
- dip_image
- disp
- display
- divergence
- dot
- double
- eig
- eig_largest
- end
- eq
- erf
- exp
- expanddim
- eye
- find
- findcoord
- fix
- flipdim
- fliplr
- flipud
- floor
- ge
- gradient
- gt
- horzcat
- hypot
- imag
- imarfun
- imarsize
- imsize
- ind2sub
- inner
- int16
- int32
- int8
- inv
- isa
- iscolor
- iscolumn
- isempty
- isfinite
- isfloat
- isinf
- isinteger
- islogical
- ismatrix
- isnan
- isreal
- isrow
- isscalar
- istensor
- isvector
- iterate
- le
- length
- loadobj
- log
- log10
- log2
- logical
- lt
- max
- mean
- median
- min
- minus
- mod
- mpower
- mrdivide
- mtimes
- ndims
- ne
- norm
- not
- numel
- or
- outer
- percentile
- permute
- phase
- pinv
- plot
- plus
- pow10
- pow2
- power
- prod
- rdivide
- real
- repmat
- reshape
- rot90
- rotate
- round
- shiftdim
- sign
- sin
- single
- size
- sqrt
- squeeze
- std
- sub2ind
- subsasgn
- subsindex
- subsref
- sum
- svd
- tan
- times
- trace
- transpose
- uint16
- uint32
- uint8
- uminus
- unique
- uplus
- var
- vertcat
- xor
DIPimage/common/dipimage/@dip_image/private
- art2lab
- artdata.m
- cmy2cmyk
- cmy2rgb
- cmyk2cmy
- compute0array
- compute1
- compute2
- di_consistentphysdims
- di_convert
- di_create
- di_defaultphysdims
- di_defaultwhite
- di_diptype
- di_findphysdims
- di_findtype
- di_findtype
- di_findtypex
- di_firsterr
- di_iscomplex
- di_isdipimobj
- di_joinchannels
- di_mattype
- di_processarray
- di_setcolspace
- grey2lab
- grey2luv
- grey2rgb
- grey2xyz
- hcv2hsv
- hcv2rgb
- hsv2hcv
- lab2art
- lab2grey
- lab2lch
- lab2xyz
- lch2lab
- luv2xyz
- matlabver_ge
- preparetensors
- rgb2cmy
- rgb2grey
- rgb2hcv
- rgb2rgbnl
- rgb2xyz
- rgbnl2rgb
- xyz2grey
- xyz2lab
- xyz2luv
- xyz2rgb
- xyz2yxy
- xyzdata
- yxy2grey
- yxy2xyz
DIPimage/common/dipimage/@dip_measurement
- dataset
- dip_measurement
- disp
- display
- double
- end
- fieldnames
- horzcat
- isempty
- isfield
- length
- loadobj
- max
- min
- rmfield
- size
- struct
- subsasgn
- subsref
- vertcat
DIPimage/common/dipimage/aliases
- bclos
- bdila
- beros
- blurgauss
- blurunif
- bopen
- bprop
- bskel
- cropim
- dip_image_array
- dip_image_new
- ex_slice
- gaussf_iir
- gauss_derivative
- gauss_fourier
- gclos
- gdila
- geros
- get_xyz
- gopen
- grey
- hist2d
- isosurfaceplot
- overlay_label
- readcolorim
- readgrayim
- readgrayim
- set_xyz
- thresh
- thresh_isodata
- thresh_symmetric
- thresh_triangle
- writecolorim
- writeim_aspect
DIPimage/common/dipimage/demos
DIPimage/common/dipimage/private
- cell2str
- convertpath
- createramp
- curvature_cirular
- curvature_parabolic
- dipfig_getbordersize
- dipio_filestatus
- dippreferencess
- di_convertphysDims
- di_derivedmeasurements
- di_mapaliases
- filt2dim
- find_files
- firsterr
- formatvalue
- getderivativeflavour
- getfigh
- gst_subsampled
- handle2str
- handlelist
- isfigh
- is_valid_varname
- label_colormap
- lin_interpol
- lin_interpol_3
- lin_interpol_3t4
- lin_interpol_4t3
- lin_interpol_reverse
- matlabver_ge
- mdhistogrammap
- niceLUT
- paramtype_array
- paramtype_array
- paramtype_boolean
- paramtype_cellarray
- paramtype_dataset
- paramtype_handle
- paramtype_image
- paramtype_indir
- paramtype_infile
- paramtype_measureid
- paramtype_measurement
- paramtype_option
- paramtype_optionarray
- paramtype_outfile
- paramtype_string
- read_chad
- read_desc
- read_lut16
- read_lut8
- read_lutA2B
- read_lutA2B
- read_TRC
- read_txt
- read_XYZ
- saturation_colormap
- test_option
- TRC_curve
- TRC_curve_reverse
- zerobased_colormap
DIPimage/common/mlv7_6/dipimage_mex
- acquireim
- affine_trans
- edir
- fast_str2double.m
- find_affine_trans
- fixlsmfile.m
- gamut_destretch
- gamut_mapping
- gamut_stretch
- localshift
- nufft_type1
- nufft_type2
- plot_gamut
- radoncircle
- rotation3d
- splitandmerge
- transform
- write_add
DIPimage/common/mlv7_6/diplib
- Contents.m
- dipio_appendrawdata.m
- dipio_colour2gray.m
- dipio_getimagereadformats.m
- dipio_getimagewriteformats.m
- dipio_getlibraryinformation.m
- dipio_imagefilegetinfo.m
- dipio_imageread.m
- dipio_imagereadcolour.m
- dipio_imagereadcolourseries.m
- dipio_imagereadroi.m
- dipio_imagereadtiff.m
- dipio_imagewrite.m
- dipio_imagewritecolour.m
- dipio_imagewriteics.m
- dip_adaptivebanana.m
- dip_adaptivegauss.m
- dip_adaptivepercentile.m
- dip_adaptivepercentilebanana.m
- dip_and.m
- dip_arcfilter.m
- dip_areaopening.m
- dip_arith.m
- dip_armdhistogram.m
- dip_attenuationcorrection.m
- dip_biasedsigma.m
- dip_bilateral.m
- dip_bilateralfilter.m
- dip_binaryanchorskeleton2d.m
- dip_binaryclosing.m
- dip_binarydilation.m
- dip_binaryerosion.m
- dip_binarynoise.m
- dip_binaryopening.m
- dip_binarypropagation.m
- dip_binaryrandomvariable.m
- dip_binaryskeleton3d.m
- dip_canny.m
- dip_chordlength.m
- dip_cityblockdistancetopoint.m
- dip_clip.m
- dip_closing.m
- dip_compare.m
- dip_contraststretch.m
- dip_convolve1d.m
- dip_convolveft.m
- dip_crop.m
- dip_croptobetterfouriersize.m
- dip_crosscorrelationft.m
- dip_cumulativesum.m
- dip_danielsonlinedetector.m
- dip_derivative.m
- dip_dgg.m
- dip_dilation.m
- dip_directedpathopening.m
- dip_dmllibfile
- dip_drawline.m
- dip_drawlines.m
- dip_edgeobjectsremove.m
- dip_edt.m
- dip_ellipticdistancetopoint.m
- dip_erfclip.m
- dip_erosion.m
- dip_euclideandistancetopoint.m
- dip_euclideanskeleton.m
- dip_exit
- dip_exponentialfitcorrection.m
- dip_extendregion.m
- dip_findshift.m
- dip_finitedifference.m
- dip_finitedifferenceex.m
- dip_fouriertransform.m
- dip_ftbox.m
- dip_ftcross.m
- dip_ftcube.m
- dip_ftellipsoid.m
- dip_ftgaussian.m
- dip_ftsphere.m
- dip_gaboriir.m
- dip_gauss.m
- dip_gaussft.m
- dip_gaussiannoise.m
- dip_gaussianrandomvariable.m
- dip_gaussiansigma.m
- dip_gaussiir.m
- dip_gdt.m
- dip_generalconvolution.m
- dip_generalisedkuwahara.m
- dip_generalisedkuwaharaimproved.m
- dip_generateramp.m
- dip_getboundary.m
- dip_getlibraryinformation.m
- dip_getmaximumandminimum.m
- dip_getmeasurefeatures.m
- dip_getnumberofthreads.m
- dip_getobjectlabels.m
- dip_gettruncation.m
- dip_gradientdirection2d.m
- dip_gradientmagnitude.m
- dip_growregions.m
- dip_growregionsweighted.m
- dip_hartleytransform.m
- dip_hysteresisthreshold.m
- dip_idivergence.m
- dip_imagechaincode.m
- dip_imagelut.m
- dip_imarlut.m
- dip_incoherentotf.m
- dip_incoherentpsf.m
- dip_initialise_libs
- dip_isodatathreshold.m
- dip_kuwahara.m
- dip_kuwaharaimproved.m
- dip_label.m
- dip_laplace.m
- dip_laplacemindgg.m
- dip_laplaceplusdgg.m
- dip_lee.m
- dip_linefit.m
- dip_localminima.m
- dip_map.m
- dip_maxima.m
- dip_maximum.m
- dip_maximumpixel.m
- dip_mdhistogram.m
- dip_mean.m
- dip_measure.m
- dip_medianfilter.m
- dip_minima.m
- dip_minimum.m
- dip_minimumpixel.m
- dip_mirror.m
- dip_modulofloatperiodic.m
- dip_morphologicalgradmag.m
- dip_morphologicalrange.m
- dip_morphologicalreconstruction.m
- dip_morphologicalsmoothing.m
- dip_morphologicalthreshold.m
- dip_multiscalemorphgrad.m
- dip_nonmaximumsuppression.m
- dip_objecttomeasurement.m
- dip_opening.m
- dip_or.m
- dip_orientationspace.m
- dip_orientedgauss.m
- dip_paircorrelation.m
- dip_pathopening.m
- dip_percentile.m
- dip_percentilefilter.m
- dip_pgst3dline.m
- dip_pgst3dsurface.m
- dip_poissonnoise.m
- dip_poissonrandomvariable.m
- dip_positionmaximum.m
- dip_positionminimum.m
- dip_positionpercentile.m
- dip_probabilisticcorrelation.m
- dip_prod.m
- dip_pseudoinverse.m
- dip_quantizedbilateralfilter.m
- dip_radialdistribution.m
- dip_radialmaximum.m
- dip_radialmean.m
- dip_radialminimum.m
- dip_radialsum.m
- dip_randomseed.m
- dip_randomvariable.m
- dip_rangethreshold.m
- dip_rankcontrastfilter.m
- dip_resampleat.m
- dip_resampling.m
- dip_resamplingft.m
- dip_rotation.m
- dip_rotation3d.m
- dip_rotation3daxis
- dip_rotation3d_axis.m
- dip_rotation_with_bgval.m
- dip_seededwatershed.m
- dip_separableconvolution.m
- dip_setboundary.m
- dip_setnumberofthreads.m
- dip_settruncation.m
- dip_sharpen.m
- dip_shift.m
- dip_sigma.m
- dip_simplegaussfitimage.m
- dip_simulatedattenuation.m
- dip_skewing.m
- dip_smallobjectsremove.m
- dip_sobelgradient.m
- dip_sortindices.m
- dip_standarddeviation.m
- dip_structureadaptivegauss.m
- dip_structureanalysis.m
- dip_structuretensor2d.m
- dip_structuretensor3d.m
- dip_subpixellocation.m
- dip_subpixelmaxima.m
- dip_subpixelminima.m
- dip_subsampling.m
- dip_sum.m
- dip_svd.m
- dip_symmetriceigensystem2.m
- dip_symmetriceigensystem3.m
- dip_systemdoctor
- dip_tensorimageinverse.m
- dip_testobjectaddnoise.m
- dip_testobjectblur.m
- dip_testobjectcreate.m
- dip_testobjectmodulate.m
- dip_threshold.m
- dip_tikhonovmiller.m
- dip_tikhonovregparam.m
- dip_tophat.m
- dip_uniform.m
- dip_uniformnoise.m
- dip_uniformrandomvariable.m
- dip_upperenvelope.m
- dip_upperskeleton2d.m
- dip_variancefilter.m
- dip_vdt.m
- dip_watershed.m
- dip_wiener.m
- dip_wrap.m
- dip_xor.m
- parameters.m
Versions that use the GitHub default branch cannot be downloaded
Version | Published | Release Notes | |
---|---|---|---|
1.2.0.0 | updated description |
|
|
1.1.0.0 | Add a figure to illustrate the function of this work |
|
|
1.0.0.0 |
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)