Operator Reference

texture_lawstexture_lawsTextureLawsTextureLawstexture_laws (Operator)

texture_lawstexture_lawsTextureLawsTextureLawstexture_laws — Filter an image using a Laws texture filter.

Signature

texture_laws(Image : ImageTexture : FilterTypes, Shift, FilterSize : )

Herror texture_laws(const Hobject Image, Hobject* ImageTexture, const char* FilterTypes, const Hlong Shift, const Hlong FilterSize)

Herror T_texture_laws(const Hobject Image, Hobject* ImageTexture, const Htuple FilterTypes, const Htuple Shift, const Htuple FilterSize)

void TextureLaws(const HObject& Image, HObject* ImageTexture, const HTuple& FilterTypes, const HTuple& Shift, const HTuple& FilterSize)

HImage HImage::TextureLaws(const HString& FilterTypes, Hlong Shift, Hlong FilterSize) const

HImage HImage::TextureLaws(const char* FilterTypes, Hlong Shift, Hlong FilterSize) const

HImage HImage::TextureLaws(const wchar_t* FilterTypes, Hlong Shift, Hlong FilterSize) const   ( Windows only)

static void HOperatorSet.TextureLaws(HObject image, out HObject imageTexture, HTuple filterTypes, HTuple shift, HTuple filterSize)

HImage HImage.TextureLaws(string filterTypes, int shift, int filterSize)

def texture_laws(image: HObject, filter_types: str, shift: int, filter_size: int) -> HObject

Description

texture_lawstexture_lawsTextureLawsTextureLawstexture_laws applies a texture transformation (according to Laws) to an image. This is done by convolving the input image with a special filter mask. The filters are:

9 different 3×3 matrices obtainable from the following three vectors: l = [ 1 2 1 ], e = [ -1 0 1 ], s = [ -1 2 -1 ] 25 different 5×5 matrices obtainable from the following five vectors: l = [ 1 4 6 4 1 ], e = [ -1 -2 0 2 1 ], s = [ -1 0 2 0 -1 ], w = [ -1 2 0 -2 1 ] r = [ 1 -4 6 -4 1 ], 49 different 7×7 matrices obtainable from the following seven vectors: l = [ 1 6 15 20 15 6 1 ], e = [ -1 -4 -5 0 5 4 1 ], s = [ -1 -2 1 4 1 -2 -1 ], w = [ -1 0 3 0 -3 0 1 ], r = [ 1 -2 -1 4 -1 -2 1 ], u = [ 1 -4 5 0 -5 4 -1 ] o = [ -1 6 -15 20 -15 6 -1 ] The names of the filters are mnemonics for “level,” “edge,” “spot,” “wave,” “ripple,” “undulation,” and “oscillation.”

For most of the filters the resulting gray values must be modified by a ShiftShiftShiftshiftshift. This makes the different textures in the output image more comparable to each other, provided suitable filters are used.

The name of the filter is composed of the letters of the two vectors used, where the first letter denotes convolution in the column direction while the second letter denotes convolution in the row direction.

Attention

texture_lawstexture_lawsTextureLawsTextureLawstexture_laws can be executed on OpenCL devices.

Note that filter operators may return unexpected results if an image with a reduced domain is used as input. Please refer to the chapter Filters.

Execution Information

  • Supports OpenCL compute devices.
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).
  • Multithreading scope: global (may be called from any thread).
  • Automatically parallelized on tuple level.
  • Automatically parallelized on channel level.
  • Automatically parallelized on domain level.

Parameters

ImageImageImageimageimage (input_object)  (multichannel-)image(-array) objectHImageHObjectHObjectHobject (byte* / int2* / uint2*) *allowed for compute devices

Images to which the texture transformation is to be applied.

ImageTextureImageTextureImageTextureimageTextureimage_texture (output_object)  (multichannel-)image(-array) objectHImageHObjectHObjectHobject * (byte / int2 / uint2)

Texture images.

FilterTypesFilterTypesFilterTypesfilterTypesfilter_types (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Desired filter.

Default: 'el' "el" "el" "el" "el"

Suggested values: 'll'"ll""ll""ll""ll", 'le'"le""le""le""le", 'ls'"ls""ls""ls""ls", 'lw'"lw""lw""lw""lw", 'lr'"lr""lr""lr""lr", 'lu'"lu""lu""lu""lu", 'lo'"lo""lo""lo""lo", 'el'"el""el""el""el", 'ee'"ee""ee""ee""ee", 'es'"es""es""es""es", 'ew'"ew""ew""ew""ew", 'er'"er""er""er""er", 'eu'"eu""eu""eu""eu", 'eo'"eo""eo""eo""eo", 'sl'"sl""sl""sl""sl", 'se'"se""se""se""se", 'ss'"ss""ss""ss""ss", 'sw'"sw""sw""sw""sw", 'sr'"sr""sr""sr""sr", 'su'"su""su""su""su", 'so'"so""so""so""so", 'wl'"wl""wl""wl""wl", 'we'"we""we""we""we", 'ws'"ws""ws""ws""ws", 'ww'"ww""ww""ww""ww", 'wr'"wr""wr""wr""wr", 'wu'"wu""wu""wu""wu", 'wo'"wo""wo""wo""wo", 'rl'"rl""rl""rl""rl", 're'"re""re""re""re", 'rs'"rs""rs""rs""rs", 'rw'"rw""rw""rw""rw", 'rr'"rr""rr""rr""rr", 'ru'"ru""ru""ru""ru", 'ro'"ro""ro""ro""ro", 'ul'"ul""ul""ul""ul", 'ue'"ue""ue""ue""ue", 'us'"us""us""us""us", 'uw'"uw""uw""uw""uw", 'ur'"ur""ur""ur""ur", 'uu'"uu""uu""uu""uu", 'uo'"uo""uo""uo""uo", 'ol'"ol""ol""ol""ol", 'oe'"oe""oe""oe""oe", 'os'"os""os""os""os", 'ow'"ow""ow""ow""ow", 'or'"or""or""or""or", 'ou'"ou""ou""ou""ou", 'oo'"oo""oo""oo""oo"

ShiftShiftShiftshiftshift (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Shift to reduce the gray value dynamics.

Default: 2

Suggested values: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

FilterSizeFilterSizeFilterSizefilterSizefilter_size (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Size of the filter kernel.

Default: 5

List of values: 3, 5, 7

Example (HDevelop)

* Simple two-dimensional pixel classification
dev_get_window (WindowHandle)
read_image(Image,'combine')
texture_laws(Image,Texture1,'es',3,7)
texture_laws(Image,Texture2,'le',7,7)
MaskSize := 51
mean_image(Texture1,H1,MaskSize,MaskSize)
mean_image(Texture2,H2,MaskSize,MaskSize)
dev_clear_window ()
dev_display (Image)
dev_set_color ('green')
write_string (WindowHandle, 'Mark region within one texture area')
draw_region(Region,WindowHandle)
reduce_domain(H1,Region,Foreground1)
reduce_domain(H2,Region,Foreground2)
histo_2dim(Region,Foreground1,Foreground2,Histo)
get_image_size (Image, Width, Height)
threshold(Histo,Characteristic_area,1,Width*Height)
ShowIntermediateResult := 0
if (ShowIntermediateResult)
  histo_2dim(H1,H1,H2,HistoFull)
  dev_clear_window ()
  dev_set_lut ('sqrt')
  dev_display (HistoFull)
  dev_set_draw ('margin')
  dev_display (Characteristic_area)
  stop ()
  dev_set_lut ('default')
  dev_set_draw ('fill')
endif
class_2dim_sup(H1,H2,Characteristic_area,Seg)
dev_display (Image)
dev_set_color ('red')
dev_display (Seg)

Result

texture_lawstexture_lawsTextureLawsTextureLawstexture_laws returns 2 ( H_MSG_TRUE) if all parameters are correct. If the input is empty the behavior can be set via set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>). If necessary, an exception is raised.

Possible Successors

mean_imagemean_imageMeanImageMeanImagemean_image, binomial_filterbinomial_filterBinomialFilterBinomialFilterbinomial_filter, gauss_filtergauss_filterGaussFilterGaussFiltergauss_filter, median_imagemedian_imageMedianImageMedianImagemedian_image, histo_2dimhisto_2dimHisto2dimHisto2dimhisto_2dim, learn_ndim_normlearn_ndim_normLearnNdimNormLearnNdimNormlearn_ndim_norm, thresholdthresholdThresholdThresholdthreshold

Alternatives

convol_imageconvol_imageConvolImageConvolImageconvol_image

See also

class_2dim_supclass_2dim_supClass2dimSupClass2dimSupclass_2dim_sup, class_ndim_normclass_ndim_normClassNdimNormClassNdimNormclass_ndim_norm

References

Laws, Kenneth Ivan. “Textured Image Segmentation”; Ph.D. Thesis, Department of Electrical Engineering, Image Processing Institute, University of Southern California, 1980

Module

Foundation