2016-04-18 9 views
8

Ich habe ein Bild, das ich Ausgleichen und dann mit CLAHE Histogramm auf, etwa so:Wie kann man Rauschen aus einem Histogramm-entzerrten Bild entfernen?

self.equ = cv2.equalizeHist(self.result_array) 
clahe = cv2.createCLAHE(clipLimit=100.0, tileGridSize=(8,8)) 
self.cl1 = clahe.apply(self.equ) 

Dies ist das Ergebnis, das ich bekommen:

enter image description here

Ich will, um loszuwerden, all die schwarzen Punkte, die Rauschen sind. Letztendlich versuche ich, die Blutgefäße, die im obigen Bild schwarz sind, herauszuziehen, weil das Rauschen die Extraktion ungenau macht.

+1

der Lärm schön kontrastreich aussieht, müssen Sie nur eine anzuwenden Entfleckungsprozess. Versuchen Sie diese Antwort: http://stackoverflow.com/questions/5680429/how-to-implement-despeckle-in-opencv – PeteB

+3

könnte einfacher sein, das Rauschen in dem Bild ohne Histogramm zu reduzieren. – Micka

+0

Wenn dieses Rauschen im Originalbild nicht vorhanden ist, handelt es sich um ein Artefakt der Entzerrung. Sie können Optionen wie Gamma-Korrektur und Kontrast-Stretching ausprobieren. Auch der Frangi-Filter wird normalerweise verwendet, um behälterähnliche Strukturen zu extrahieren. – dhanushka

Antwort

2

Ein großer Teil meiner Arbeit beschäftigte sich mit der Reduzierung von Bildrauschen, und es gab eine Technik, die das Rauschen in Bildern reduzierte und dabei die scharfen Kanten der Information im Bild beibehielt. Ich fahre mich hier:

eine wirksame Technik für Lärm von Streifenmustern zu entfernen ist, das Bild unter Verwendung von Sinus-Cosinus-Filterung [reference] zu filtern. Ein Tiefpassfilter wird mit den beiden Bildern gefaltet, die sich aus dem Sinus und dem Kosinus des Streifenmusterbildes ergeben, die dann geteilt werden, um die Tangente zu erhalten, wobei das Phasenmuster wiederhergestellt wird, jedoch mit reduziertem Rauschen. Der Vorteil dieser Technik besteht darin, dass der Prozess mehrere Male wiederholt werden kann, um das Rauschen zu reduzieren, während die scharfen Details der Phasenübergänge beibehalten werden.

Und hier ist der Code I verwendet:

import numpy as np 
from scipy import ndimage 

def scfilter(image, iterations, kernel): 
    """ 
    Sine‐cosine filter. 
    kernel can be tuple or single value. 
    Returns filtered image. 
    """ 
    for n in range(iterations): 
     image = np.arctan2(
     ndimage.filters.uniform_filter(np.sin(image), size=kernel), 
     ndimage.filters.uniform_filter(np.cos(image), size=kernel)) 
    return image 

Dort wurde image ein numpy Array die das Bild darstellen, neu skaliert linear mit 0 und weiß bei 2 * pi schwarz zu setzen, und kernal ist die Größe in Bildpixel des auf die Daten angewendeten gleichförmigen Filters. Es sollte nicht zu viele Iterationen nehmen ein positives Ergebnis, vielleicht im Bereich von 5 bis 20.

Hoffnung, um zu sehen, das hilft :)

Verwandte Themen