For example, some studies show how to smooth a spectrogram with a 2D median filter vertically and horizontally (along time or frequency). My question is how would I apply 2D median filter along the diagonals of the spectrogram instead? This would be useful for a certain study I am doing, so I need to understand how that would be coded in MATLAB.
1 Answer
The median filter can be applied on many pixel-set shapes, and indeed this was used to emulate of fasten full 2D median filters by a combination of leaner medians.
In Matlab, your request just amounts to gather diagonal elements in a vector. The simplest could be:
- extract each sliding square patch of the image
- extract the diagonal as a matrix with
diag.m
- compute the median
If you want the antidiagonal, flip the square patch with flipud
, fliprl
.
If you want other diagonals than the $\pm 45°$, you have to use discrete lines, for instance with the Bresenham algorithm.
If you want to remain high level, I'd suggest you to use gblk: a pedestrian data block extractor at MatlabCentral to parse an image with overlapping blocks.
-
$\begingroup$ Hi, thanks for reply. This is very interesting. My only question is, how do you do "extract each sliding square patch of the image" in matlab and also can you show matlab example of the discrete lines for other degrees than 45. thank you! $\endgroup$– DanCommented Mar 14, 2018 at 22:40
-
$\begingroup$ I appreciate your feedback. If your question is only about codes in Matlab, it does not belong to SE. DSP. However, I would suggest you to provide self-made by updating your question, with actual data, and we can help your in that direction. In other words, the question is interesting, yet yet we ain't coding at your place $\endgroup$ Commented Mar 15, 2018 at 6:10
gblk
, a Matlab toolbox you ought to invest in if you want to parse blocks in images $\endgroup$