The following functions are proposed to implement matrix data shift in user defined direction. In case of image processing it is highly useful in image stabilization, denoising etc…
In short:
- "floatingCircShift" is a variant of circhift, but supports non integer inputs, for numerical matrices. Supports 'circular' padding.
- "normshift" fast and efficient multi-dimensional and multi-type, with only zero bound assumption.
- "imshift" designated to be used with images (numerical matrices up to 3 dimentions). Capable to shift several images at once, user definable boundaries assumptions: 'zero', 'circular', 'replicate' 'symmetric'. See "imfilter" for details.
Why was this needed? While circhift is fast and all types and input dimensions supporting, is implies a circular signal, which in not always the case. In addition it supports only integer shift values, while fractional number sometimes needed. See subplot 1- with sky’s coming out of the ground. Sometimes it is better to assume zero values outside the image bounds- see subplots 2,3. In this case my function "normshift" will be useful, as it is fast and supports all types of data.
When a user needs additional boundaries assumptions, he can use my "imshift" function, which is somewhat limited in supported inputs (numerical matrices up to 3 dimensions), and runs at slower pace, but it supports different types of boundaries types : 'symmetric', 'replicate'-subplot 4, 'circular’ and zero/X values bounds.
For details see functions headers, and demo file "demoImageShifting.m"
引用格式
Nikolay S. (2026). Image/matrix shift (https://ww2.mathworks.cn/matlabcentral/fileexchange/32078-image-matrix-shift), MATLAB Central File Exchange. 检索时间: .
致谢
启发作品: Shift based LBP
