Класс SelectiveFilteringCommand
Применяет к изображению выборочную фильтрацию в частотной области.
Вот C#/VB.NET код, который демонстрирует, как удалить периодический шум из изображения.
''' <summary>
''' Removes periodic noise from image.
''' </summary>
''' <param name="image">input image.</param>
Public Sub RemovePeriodicNoise(image As Vintasoft.Imaging.VintasoftImage)
' notch points for selective filtering
Dim notchPoints As System.Drawing.Point()
' create frequency spectrum visualizer command
Dim spectrumVisualizer As New Vintasoft.Imaging.ImageProcessing.Fft.FrequencySpectrumVisualizerCommand()
' visualize imae spectrum
Using imageSpectrum As Vintasoft.Imaging.VintasoftImage = spectrumVisualizer.Execute(image)
' analyse image spectrum and determine notch points
AnalyseImageSpectrum(imageSpectrum, notchPoints)
End Using
' cutoff frequency for spectrum filters
Dim cutoffFrequency As Double = 0.04
' create composite spectrum filter
Dim compositeFilter As New Vintasoft.Imaging.ImageProcessing.Fft.Filtering.Selective.CompositeSpectrumFilter(New System.Collections.Generic.List(Of Vintasoft.Imaging.ImageProcessing.Fft.Filtering.Selective.FrequencySpectrumFilter)())
' add Ideal notch reject spectrum filter
compositeFilter.Items.Add(New Vintasoft.Imaging.ImageProcessing.Fft.Filtering.Selective.IdealNotchRejectSpectrumFilter(notchPoints(0), cutoffFrequency))
' add Butterworth notch reject spectrum filter
compositeFilter.Items.Add(New Vintasoft.Imaging.ImageProcessing.Fft.Filtering.Selective.ButterworthNotchRejectSpectrumFilter(notchPoints(1), cutoffFrequency))
' add Gaussian notch reject spectrum filter
compositeFilter.Items.Add(New Vintasoft.Imaging.ImageProcessing.Fft.Filtering.Selective.GaussianNotchRejectSpectrumFilter(notchPoints(2), cutoffFrequency))
' create selective filtering command
Dim selectiveFiltering As New Vintasoft.Imaging.ImageProcessing.Fft.Filtering.Selective.SelectiveFilteringCommand()
selectiveFiltering.Filter = compositeFilter
' execute selective filtering
selectiveFiltering.ExecuteInPlace(image)
End Sub
''' <summary>
''' Analyses image spectrum and determines notch points.
''' </summary>
''' <param name="spectrum">Image spectrum.</param>
''' <param name="notchPoints">Notch points.</param>
Public Sub AnalyseImageSpectrum(spectrum As Vintasoft.Imaging.VintasoftImage, ByRef notchPoints As System.Drawing.Point())
' determine notch points
' ...
notchPoints = New System.Drawing.Point(2) {}
notchPoints(0) = New System.Drawing.Point(30, 30)
notchPoints(1) = New System.Drawing.Point(30, 50)
notchPoints(2) = New System.Drawing.Point(30, 80)
End Sub
/// <summary>
/// Removes periodic noise from image.
/// </summary>
/// <param name="image">input image.</param>
public void RemovePeriodicNoise(Vintasoft.Imaging.VintasoftImage image)
{
// notch points for selective filtering
System.Drawing.Point[] notchPoints;
// create frequency spectrum visualizer command
Vintasoft.Imaging.ImageProcessing.Fft.FrequencySpectrumVisualizerCommand spectrumVisualizer =
new Vintasoft.Imaging.ImageProcessing.Fft.FrequencySpectrumVisualizerCommand();
// visualize imae spectrum
using (Vintasoft.Imaging.VintasoftImage imageSpectrum = spectrumVisualizer.Execute(image))
{
// analyse image spectrum and determine notch points
AnalyseImageSpectrum(imageSpectrum, out notchPoints);
}
// cutoff frequency for spectrum filters
double cutoffFrequency = 0.04;
// create composite spectrum filter
Vintasoft.Imaging.ImageProcessing.Fft.Filtering.Selective.CompositeSpectrumFilter compositeFilter =
new Vintasoft.Imaging.ImageProcessing.Fft.Filtering.Selective.CompositeSpectrumFilter(
new System.Collections.Generic.List<Vintasoft.Imaging.ImageProcessing.Fft.Filtering.Selective.FrequencySpectrumFilter>());
// add Ideal notch reject spectrum filter
compositeFilter.Items.Add(
new Vintasoft.Imaging.ImageProcessing.Fft.Filtering.Selective.IdealNotchRejectSpectrumFilter(
notchPoints[0], cutoffFrequency));
// add Butterworth notch reject spectrum filter
compositeFilter.Items.Add(
new Vintasoft.Imaging.ImageProcessing.Fft.Filtering.Selective.ButterworthNotchRejectSpectrumFilter(
notchPoints[1], cutoffFrequency));
// add Gaussian notch reject spectrum filter
compositeFilter.Items.Add(
new Vintasoft.Imaging.ImageProcessing.Fft.Filtering.Selective.GaussianNotchRejectSpectrumFilter(
notchPoints[2], cutoffFrequency));
// create selective filtering command
Vintasoft.Imaging.ImageProcessing.Fft.Filtering.Selective.SelectiveFilteringCommand selectiveFiltering =
new Vintasoft.Imaging.ImageProcessing.Fft.Filtering.Selective.SelectiveFilteringCommand();
selectiveFiltering.Filter = compositeFilter;
// execute selective filtering
selectiveFiltering.ExecuteInPlace(image);
}
/// <summary>
/// Analyses image spectrum and determines notch points.
/// </summary>
/// <param name="spectrum">Image spectrum.</param>
/// <param name="notchPoints">Notch points.</param>
public void AnalyseImageSpectrum(Vintasoft.Imaging.VintasoftImage spectrum, out System.Drawing.Point[] notchPoints)
{
// determine notch points
// ...
notchPoints = new System.Drawing.Point[3];
notchPoints[0] = new System.Drawing.Point(30, 30);
notchPoints[1] = new System.Drawing.Point(30, 50);
notchPoints[2] = new System.Drawing.Point(30, 80);
}
Целевые платформы: .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5