Это интересная небольшая проблема. Вместо того, чтобы пытаться найти для него библиотеку, почему бы не написать ее из определения?
from scipy.ndimage.filters import uniform_filter
from scipy.ndimage.measurements import variance
def lee_filter(img, size):
img_mean = uniform_filter(img, (size, size))
img_sqr_mean = uniform_filter(img**2, (size, size))
img_variance = img_sqr_mean - img_mean**2
overall_variance = variance(img)
img_weights = img_variance**2/(img_variance**2 + overall_variance**2)
img_output = img_mean + img_weights * (img - img_mean)
return img_output
Если вы не хотите, чтобы окно быть квадратом размера х размеров, просто заменить uniform_filter
с чем-то еще (сверткой с диском, гауссов фильтром, и т.д.). Любой тип (взвешенный) усредняющий фильтр будет делать, если он одинаковый для расчета как img_mean
, так и img_square_mean
.
Фильтр Ли кажется довольно старомодным как фильтр. Он не будет хорошо вести себя по краям, потому что для любого окна, в котором есть ребро, дисперсия будет намного выше, чем общая дисперсия изображения, и поэтому веса (отфильтрованного изображения относительно отфильтрованного изображения) идут чтобы быть ближе к 1.
пример:
from pylab import *
import numpy as np
img = np.random.normal(0.5, 0.1, (100,100))
img[:,:50] += 0.25
imshow(img, vmin=0, vmax=1, cmap='gray')
imshow(lee_filter(img, 20), vmin=0, vmax=1, cmap='gray')
Как вы можете видеть снижение шума очень хорошо в целом, но гораздо слабее по краю.
Я не знаком с SAR, поэтому я не знаю, есть ли у фильтра Ли некоторые функции, которые делают его особенно полезным для speckle в SAR, но вы можете захотеть взглянуть на современные граничные знаменатели, такие как управляемый фильтр или двусторонний фильтр.
Большое спасибо !!!! Алекс, на самом деле я новичок в этом домене и не смог найти хорошую литературу. Спасибо большое !!!!!!!! –
@Shubham_geo Добро пожаловать. Я добавил несколько заметок и пример. –
Пакет pyradar кажется проблемой для изображений, которые у меня есть, не могли бы вы указать нам правильное место, где мы можем найти определения для всех фильтров здесь, как и тот, который у вас есть выше? https://pyradar-tools.readthedocs.io/en/latest/examples.html#example-of-filtros – bicepjai