def smoothing_tv(data, weight, pseudo_3D='True', multichannel=False, sliceId=2): if data.ndim == 3 and pseudo_3D: if sliceId == 2: for idx in range(data.shape[2]): temp = skifil.denoise_tv_chambolle(data[:, :, idx], weight=weight, multichannel=multichannel) data[:, :, idx] = (255 * temp).astype(np.uint8) elif sliceId == 0: for idx in range(data.shape[0]): temp = skifil.denoise_tv_chambolle(data[idx, :, :], weight=weight, multichannel=multichannel) data[idx, :, :] = (255 * temp).astype(np.uint8) else: data = skifil.denoise_tv_chambolle(data, weight=weight, multichannel=False) data = (255 * data).astype(np.uint8) return data
def tvChambolle(image, weight, eps=0.001, maxIter=None, out=None): # to restore min max ? restore=False if image.min() < 1.0 or image.max() > 1.0: restore=True gaussSmoothed = gaussianSmoothing(image, simga=1.0) oldMin = gaussSmoothed.min() oldMax = gaussSmoothed.max() image -= image.min() image /= image.max() kwargs = dict(im=image, weight=weight, eps=eps, multichannel=False) if maxIter is not None: kwargs['n_iter_max'] = maxIter res = denoise_tv_chambolle(**kwargs) if restore: res -= res.min() res /= res.max() res *= (oldMax-oldMin) res += oldMin if out is None: return res else: out[:] = res[:] return out
def _denoise(self, img, weight): """ use TV-denoise to remove noise http://scipy-lectures.github.com/advanced/image_processing/ http://en.wikipedia.org/wiki/Total_variation_denoising """ from skimage.filters import denoise_tv_chambolle img = denoise_tv_chambolle(img, weight=weight) * 255 return img.astype('uint8')
# FILTER COMPARISION import matplotlib.pyplot as plt from skimage import data from skimage import filters from scipy import ndimage coins = data.coins() gaussian_filter_coins = ndimage.gaussian_filter(coins, sigma=2) med_filter_coins = ndimage.filters.median_filter(coins,size=2) tv_filter_coins = filters.denoise_tv_chambolle(coins, weight=0.1) plt.figure(figsize=(16, 4)) plt.subplot(141) plt.imshow(coins[10:80, 300:370], cmap='gray', interpolation='nearest') plt.axis('off') plt.title('Image') plt.subplot(142) plt.imshow(gaussian_filter_coins[10:80, 300:370], cmap='gray',interpolation='nearest') plt.axis('off') plt.title('Gaussian filter') plt.subplot(143) plt.imshow(med_filter_coins[10:80, 300:370], cmap='gray',interpolation='nearest') plt.axis('off') plt.title('Median filter') plt.subplot(144) plt.imshow(tv_filter_coins[10:80, 300:370], cmap='gray',interpolation='nearest') plt.axis('off') plt.title('TV filter') plt.show()