<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="../../../design/description.xslt" type="text/xsl"?>
<node xmlns="http://dynamicnodes.mastersign.de/description" 
      type="DynamicNode.Lib.Imaging.NConvolution" assembly="NLibDefault">
	<caption>Convolution</caption>
	<group>Bildverarbeitung</group>
	<description>Wendet ein MDO als Convolution-Kernel auf ein weiteres MDO an.</description>
	<inPorts>
		<port name="kernel" caption="Kernel">
			<type>Matrix&lt;Single&gt;</type>
			<description>Der Kernel.</description>
		</port>
		<port name="source" caption="Quelle">
			<type>ARGBImage</type>
			<type>RGBImage</type>
			<type>Matrix&lt;Byte&gt;</type>
			<description>Das Ausgangs-MDO.</description>
		</port>
	</inPorts>
	<outPorts>
		<port name="result" caption="Ergebnis">
			<type>ARGBImage</type>
			<type>RGBImage</type>
			<type>Matrix&lt;Byte&gt;</type>
			<description>Das Ergebnis-MDO.</description>
		</port>
	</outPorts>
	<helpText>
		<p>
      Dieser Knoten wendet eine Matrix als Kernel auf ein Bild an.
    </p>
		<p>
      Das Randproblem wird mit einer dynamischen Maske auf dem Kernel gelöst.
      D.h. es werden nur jene Felder des Kernels in der Berechnung verwendet,
      die auf eine gültige Adresse im zu filternden Bild treffen.
      Damit wird ein minimaler Randeffekt erzielt.
    </p>
		<comment>
      Es ist zu überlegen, ob es sich lohnt den Convolution-Filter
      auf N Dimensionen zu erweitern. Oder einen weiteren N-Dimensionalen
      Convolution-Filter zu implementieren.
      (Mit 3 Dimensionen ist eine kanalübergreifende Filterung möglich.
      Mit 4 Dimensionen ist eine kanalübergreifende unf zeitliche Filterung
      von Bildsequenzen möglich.)
    </comment>
	</helpText>
</node>