<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Sobel-Operator: Wie Pixel in Bilddatei auswählen?]]></title><description><![CDATA[<p>Hallo,</p>
<p>derzeit bin ich dabei, eine Kantenerkennung mittels Sobel-Operator zu realiseren.<br />
Leider scheitere ich dabei noch an einem sehr grundlegenden Problem.<br />
Ich möchte eine Bilddatei eines bestimmten Formates (welches ist noch nicht festegelegt) einlesen, die Kantenerkennung durchführen und diese in einer Ausgabedatei schreiben.<br />
Allerdings weiß ich nicht, wie ich durch die einzelnen Pixel einer Bilddatei navigieren kann. Sprich zu sagen, gehe in Reihe 3, Pixel 7 etc.. Dies ist für den Sobel-Operator aber zwingend erforderlich.<br />
Kann mir hierzu jemand einen guten Tipp geben?</p>
<p>Aufbauend darauf wäre es nötig, die Höhe und Breite des Bildes automatisch erkennen zu lassen. Wie ist dies unter C++ möglich?</p>
<p>Vielen Dank! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271326/sobel-operator-wie-pixel-in-bilddatei-auswählen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 07:51:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271326.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 26 Jul 2010 15:54:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sobel-Operator: Wie Pixel in Bilddatei auswählen? on Mon, 26 Jul 2010 15:54:48 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>derzeit bin ich dabei, eine Kantenerkennung mittels Sobel-Operator zu realiseren.<br />
Leider scheitere ich dabei noch an einem sehr grundlegenden Problem.<br />
Ich möchte eine Bilddatei eines bestimmten Formates (welches ist noch nicht festegelegt) einlesen, die Kantenerkennung durchführen und diese in einer Ausgabedatei schreiben.<br />
Allerdings weiß ich nicht, wie ich durch die einzelnen Pixel einer Bilddatei navigieren kann. Sprich zu sagen, gehe in Reihe 3, Pixel 7 etc.. Dies ist für den Sobel-Operator aber zwingend erforderlich.<br />
Kann mir hierzu jemand einen guten Tipp geben?</p>
<p>Aufbauend darauf wäre es nötig, die Höhe und Breite des Bildes automatisch erkennen zu lassen. Wie ist dies unter C++ möglich?</p>
<p>Vielen Dank! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932125</guid><dc:creator><![CDATA[duckman]]></dc:creator><pubDate>Mon, 26 Jul 2010 15:54:48 GMT</pubDate></item><item><title><![CDATA[Reply to Sobel-Operator: Wie Pixel in Bilddatei auswählen? on Mon, 26 Jul 2010 16:00:13 GMT]]></title><description><![CDATA[<p>Das ist mMn alles viel zu abhängig vom Bildformat. z.B. steht in manchen Formaten direkt im Header, wieviele Pixel jeweils eine Reihe bilden. Mit der gegebenen Anzahl der Pixel kannst du dann so auch die Höhe bestimmen. Wie man an die Pixel kommt? Im simpelsten Fall sind die einfach mal nicht komprimiert z.B. als ASCII in der Datei in Form von RGB-Tripeln, das war AFAIK das ppm-Format. Du musst also einfach eine Klasse für Pixel erstellen und einen Inputoperator definieren, der das Speicherformat in ein Rechenformat umwandelt und das Bild in deinem RAM als Sequenz von Pixeln abbildet. Wie das konkret geht ist vom Format abhängig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932128</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Mon, 26 Jul 2010 16:00:13 GMT</pubDate></item><item><title><![CDATA[Reply to Sobel-Operator: Wie Pixel in Bilddatei auswählen? on Mon, 26 Jul 2010 16:03:17 GMT]]></title><description><![CDATA[<p>Wie gesagt, mit dem Dateiformat habe ich mich noch nicht festgelegt. Deshalb wähle ich hier auch gerne das Simpelste. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Die Frage ist nur, welches das ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932131</guid><dc:creator><![CDATA[duckman]]></dc:creator><pubDate>Mon, 26 Jul 2010 16:03:17 GMT</pubDate></item><item><title><![CDATA[Reply to Sobel-Operator: Wie Pixel in Bilddatei auswählen? on Mon, 26 Jul 2010 16:04:33 GMT]]></title><description><![CDATA[<p>Ich fand Portable Pixmap ziemlich einfach. Dafür ist das Format alles andere als optimal. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> (Besonders das ASCII-Angebot).<br />
Das englische Wikipedia gibt eine ausführliche Erläuterung zu diesem Bildformat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932132</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Mon, 26 Jul 2010 16:04:33 GMT</pubDate></item><item><title><![CDATA[Reply to Sobel-Operator: Wie Pixel in Bilddatei auswählen? on Mon, 26 Jul 2010 16:14:05 GMT]]></title><description><![CDATA[<p>Bisher habe ich durch Zufall sogar mit dem PGM-Format gearbeitet. Dementsprechend sind die Unterschiede ja nicht mehr groß. Bis auf den einen Punkt, dass ich jetzt drei Farbwerte pro Pixel statt einem habe.</p>
<p>Wie kann man das im Sobel-Operator berücksichtigen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932139</guid><dc:creator><![CDATA[duckman]]></dc:creator><pubDate>Mon, 26 Jul 2010 16:14:05 GMT</pubDate></item><item><title><![CDATA[Reply to Sobel-Operator: Wie Pixel in Bilddatei auswählen? on Mon, 26 Jul 2010 16:31:29 GMT]]></title><description><![CDATA[<p>Entweder lädst du das Bild, machst daraus Graustufen und sobelst das Grauwertbild oder du sobelst die 3(4) RGB(A) einzeln und kombinierst die Ergebnisse irgendwie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932149</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Mon, 26 Jul 2010 16:31:29 GMT</pubDate></item><item><title><![CDATA[Reply to Sobel-Operator: Wie Pixel in Bilddatei auswählen? on Mon, 26 Jul 2010 16:34:02 GMT]]></title><description><![CDATA[<p>padreigh schrieb:</p>
<blockquote>
<p>Entweder lädst du das Bild, machst daraus Graustufen und sobelst das Grauwertbild oder du sobelst die 3(4) RGB(A) einzeln und kombinierst die Ergebnisse irgendwie.</p>
</blockquote>
<p>Ich weiß, diese zwei Möglichkeiten gibt es. Nur weiß ich bei beiden nicht, wie man das innerhalb von C++ durchführen kann. Bzw. ist mir für Variante 2 der Algorithmus nicht bekannt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932150</guid><dc:creator><![CDATA[duckman]]></dc:creator><pubDate>Mon, 26 Jul 2010 16:34:02 GMT</pubDate></item><item><title><![CDATA[Reply to Sobel-Operator: Wie Pixel in Bilddatei auswählen? on Mon, 26 Jul 2010 22:46:37 GMT]]></title><description><![CDATA[<p>Am einfachsten finde ich das (unkomprimierte) Targa Dateiformat (erweiterung .tga).</p>
<p>Ich hab mal eine Funktion für ein OpenGL Projekt geschrieben, das eine TGA Datei in den Speicher liest und anschließend in die Grafikkarte packt. Dabei wird die Bildgröße (Höhe * Breite) abgespeichert, sowie ein Array mit (Höhe*Breite) Pixeln, wobei ein Pixel nochmal aus 3 bzw. 4 Bytes besteht, für Blau, Grün, Rot und gegebenfalls dem Alpha Channel (Durchsichtigkeit). Die OpenGL Sachen sollten sich relativ schnell rausschreiben lassen, wenn du interresse hast einfach mal ne pm schreiben.</p>
<p>Ansonsten kann ich dir die Intel JPEG library empfehlen (ijl15.dll), die wird zwar offiziell nicht mehr unterstützt, aber funktioniert nach wie vor rasend schnell und gut. Die macht im prinzip das selbe wie meine Funktion, in dem sie einfach ein Array mit Höhe*Breite*3 Bytes anlegt und die Farbwerte darin ablegt.</p>
<p>Als drittes gibts noch das gute alte BMP, bei ich zumindestens bei Windows von vorgefertigten Funktionen zum laden in ein Array weis.</p>
<p>/Edit: Achja und Graustufen rechnen sollte relativ schnell gehen per Durchschnittsbildung der 3 Grundfarben eines Pixels.<br />
Kann dir dazu auch grade noch ein bischen Code schreiben:</p>
<pre><code class="language-cpp">unsigned char *BerechneGraustufen( unsigned char* FarbArray, int width, int height )
{
  unsigned char *GrauArray = new unsigned char[width*height];
  for( int i = 0; i &lt; width*height; i++ )
  {
    GrauArray[i] = (FarbArray[i*3] + FarbArray[i*3+1] + FarbArray[i*3+2]) / 3;
  }

  return GrauArray;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1932320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932320</guid><dc:creator><![CDATA[RedPuma]]></dc:creator><pubDate>Mon, 26 Jul 2010 22:46:37 GMT</pubDate></item><item><title><![CDATA[Reply to Sobel-Operator: Wie Pixel in Bilddatei auswählen? on Tue, 27 Jul 2010 15:37:11 GMT]]></title><description><![CDATA[<p>duckman schrieb:</p>
<blockquote>
<p>Ich weiß, diese zwei Möglichkeiten gibt es. Nur weiß ich bei beiden nicht, wie man das innerhalb von C++ durchführen kann.</p>
</blockquote>
<p>Nimms mir bitte nicht böse, aber da scheint mir ein paar c++ Grundlagen zu fehlen ... warum nimmst du nicht eine GrafikBib (zB. (sehr umfangreich) OpenCV) die das schon kann, wenn du es nur benutzen willst? Dann brauchst du in der Doku / den Beispielen nur noch die Methoden finden die das Bild laden, den Filter anwenden und wieder abspeichern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ansonsten finde ich das ein &quot;bisschen&quot; hochgestochen um c++ zu lernen :).</p>
<p>duckman schrieb:</p>
<blockquote>
<p>Bzw. ist mir für Variante 2 der Algorithmus nicht bekannt.</p>
</blockquote>
<p>Du löst das ganze für ein Grauwertbild. Statt grauwerten fütterst du den Algo dann einmal mit den Rot, den Grün und Blauwerten. Die resultierenden Bilder verwurstest du mit einer selbst geschriebenen max(pixeXYimrotsobel,pixelXYimgrünsobel,pixelXYimblausobel) verwurschten um ein sobel der maximalen werte zu bekommen ... wie sinnvoll das ist musst du selber entscheiden.</p>
<p>edit:<br />
<a href="http://freeimage.sourceforge.net" rel="nofollow">http://freeimage.sourceforge.net</a> Für Bilder laden und Pixelzugriff <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> dann brauchst du nur noch den Sobel zu proggen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932608</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Tue, 27 Jul 2010 15:37:11 GMT</pubDate></item><item><title><![CDATA[Reply to Sobel-Operator: Wie Pixel in Bilddatei auswählen? on Mon, 02 Aug 2010 19:39:38 GMT]]></title><description><![CDATA[<p>Vielen Dank an alle! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich habe mich für die FreeImage-Library entschieden und mein Programm inzwischen fertigstellen können.</p>
<p>Eine Frage hätte ich aber rein interessenhalber noch:<br />
Im Moment bearbeite ich ein Bild und speichere es dann auf der Festplatte. Wie kann man dieses (Original-)Bild nach dem Laden einfach unkompliziert auf dem Bildschirm darstellen?<br />
Sobald der Sobel-Filter darüber gelaufen ist, soll dann das neu erstellte Bild dargestellt werden.<br />
Ist das ohne weiteres möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933174</guid><dc:creator><![CDATA[duckman]]></dc:creator><pubDate>Mon, 02 Aug 2010 19:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to Sobel-Operator: Wie Pixel in Bilddatei auswählen? on Wed, 28 Jul 2010 15:50:40 GMT]]></title><description><![CDATA[<p>duckman schrieb:</p>
<blockquote>
<p>Ist das ohne weiteres möglich?</p>
</blockquote>
<p>Nein. C++ hat keine Grafikschnittstelle, also musst du die Möglichkeiten deines Ziel-OS verwenden. Am einfachsten dürfe das mit einem GUI-Framework wie QT oder wxWidgets gehen.<br />
Bei FreeImage sind sicher auch Samples dabei die Bilder laden und darstellen, da kannst du dir bestimmt auch was abgucken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933200</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Wed, 28 Jul 2010 15:50:40 GMT</pubDate></item><item><title><![CDATA[Reply to Sobel-Operator: Wie Pixel in Bilddatei auswählen? on Wed, 28 Jul 2010 16:00:37 GMT]]></title><description><![CDATA[<p>Für die &quot;libpng&quot; gibt es noch einen netten <a href="http://www.nongnu.org/pngpp/doc/0.2.1/" rel="nofollow">C++-Header</a>, der das Laden und Speichern von PNG-Grafiken sehr einfach macht.</p>
<p>Dann gibt es noch <a href="http://www.boost.org/doc/libs/1_36_0/libs/gil/doc/index.html" rel="nofollow">Boost.GIL</a>. Ich habe es nie benutzt. Aber da ist mWn auch PNG/TIFF/JPEG Ein/Ausgabe dabei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933210</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 28 Jul 2010 16:00:37 GMT</pubDate></item><item><title><![CDATA[Reply to Sobel-Operator: Wie Pixel in Bilddatei auswählen? on Wed, 28 Jul 2010 17:47:35 GMT]]></title><description><![CDATA[<p>alternativ kannst du versuchen die Bilder(pfade) einfach an ein Programm in deinem Betriebssystem weiterzugeben</p>
<p><a href="http://www.cplusplus.com/reference/clibrary/cstdlib/system/" rel="nofollow">http://www.cplusplus.com/reference/clibrary/cstdlib/system/</a></p>
<p>Je nach system gibts Progs die Bilder betrachten möglich machen, zB GIMP, bei PNG zB auch Firefox o.ä. vielleicht kannst du die Nutzen.<br />
Ich würds mit Qt machen, aber da ist die Einarbeitszeit bisserl hoch denke ich wenns nur um &quot;syntactic sugar&quot; bzw &quot;optical sugar&quot; geht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933257</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Wed, 28 Jul 2010 17:47:35 GMT</pubDate></item><item><title><![CDATA[Reply to Sobel-Operator: Wie Pixel in Bilddatei auswählen? on Mon, 02 Aug 2010 19:40:31 GMT]]></title><description><![CDATA[<p>Ich muss doch noch einmal auf die eigentliche Problemstellung zuürckkommen. Inzwischen ist mir aufgegefallen, dass der Operator nicht korrekt arbeitet und sogar einen Strich quer durchs Bild macht. Am besten ich zeige euch meinen Quellcode, damit ihr es selbst nachvollziehen könnt:</p>
<p>Die Sobeloperatoren werden wie folgt in den Speicher gelesen, damit ich sie in die Sobelfunktion übergeben kann:</p>
<pre><code class="language-cpp">pGX =(int*)malloc(9*sizeof(int));
   GX[0][0] = 1; GX[1][0] = 0; GX[2][0] = -1;
   GX[0][1] = 2; GX[1][1] = 0; GX[2][1] = -2;
   GX[0][2] = 1; GX[1][2] = 0; GX[2][2] = -1;

   for(j=0;j&lt;=2;j++)
   {
	   for(i=0;i&lt;=2;i++)
	   {
		*(pGX + j*3 + i)=GX[i][j];
	   }
   }

   // 3x3 GY Sobel Matrix. 
   pGY =(int*)malloc(9*sizeof(int));
   GY[0][0] = 1; GY[1][0] = 2; GY[2][0] = 1;
   GY[0][1] = 0; GY[1][1] = 0; GY[2][1] = 0;
   GY[0][2] = -1; GY[1][2] = -2; GY[2][2] = -1;

   for(j=0;j&lt;=2;j++)
   {
	   for(i=0;i&lt;=2;i++)
	   {
		*(pGY + j*3 +i)=GY[i][j];
	   }
   }
</code></pre>
<p>Das Bild wird so in den Speicher geladen:</p>
<pre><code class="language-cpp">BYTE *bits = (BYTE*)FreeImage_GetBits(verarbeitungsBild); //verarbeitungsBild  stellt das in Graustufen gewandelt Originalbild dar

	for(int y = 0; y &lt; rows; y++) 
	{
		BYTE *pixel = (BYTE*)bits;
		for(int x = 0; x &lt; columns; x++) 
		{
			*(originalImage + y*columns + x) = pixel[x];
		}
</code></pre>
<pre><code class="language-cpp">void SobelAlgorithmus(char *originalImage, char *edgeImage,int *pGX,int *pGY,int rows,int columns)
{
	int		I, J;
	int		x,y;
	int		sumX, sumY;
	int		SUM;	

	for(y=0; y&lt;=(rows-1); y++)  
   {
		for(x=0; x&lt;=(columns-1); x++)  
		{
			 sumX = 0;
			 sumY = 0;

			 // Sonderbehandlung des Bildrandes
			 if(y==0 || y==rows-1)
			  SUM = 0;
			 else if(x==0 || x==columns-1)
			  SUM = 0;

			 // Die Faltung mittels Sobel-Operator startet hier
			 else   
			 {

			   // X-Gradienten Approximation
			   for(J=-1; J&lt;=1; J++)  
			   {
				   for(I=-1; I&lt;=1; I++)  
				   {
					  sumX = sumX + (int)( (*(originalImage +(y + J)*columns + x + I )) * (*(pGX + (J+1)*3 + (I+1)) )); 
				   }
			   }

			   if(sumX&gt;255)  sumX=255;
			   if(sumX&lt;0)    sumX=0;			   

			   // Y-Gradienten Approximation
			   for(I=-1; I&lt;=1; I++)  
			   {
				   for(J=-1; J&lt;=1; J++)  
				   {
					  sumY = sumY + (int) ( (*(originalImage + (y + J)*columns) + x + I) * (*(pGY + (J+1)*3 + (I+1)) )); 
				   }
			   }
			   if(sumY&gt;255)   sumY=255;
			   if(sumY&lt;0)     sumY=0;

			   // Normalisierung der berechneten Werte
			   SUM = (int)sqrt(float((sumX*sumX) + (sumY*sumY))); 

			   // Begrenzung auf 2 mögliche Zustände um die Kanten deutlicher zu machen
				if(SUM&gt;127)   SUM=255;
				else SUM=0;

			 }

	    *(edgeImage + x + y*columns) = (char)SUM;
		}
   }
</code></pre>
<p>Neben den oben genannten Fehler ist es so, dass es keinen Unterschied macht, wenn ich die Y-Gradienten Approximation auskommentiere. Ich kann mir aber einfach nicht erklären, weswegen das so ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Hat jemand eine Idee, wo der Fehler liegen könnte? Ist der Algorithmus falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935330</guid><dc:creator><![CDATA[duckman]]></dc:creator><pubDate>Mon, 02 Aug 2010 19:40:31 GMT</pubDate></item><item><title><![CDATA[Reply to Sobel-Operator: Wie Pixel in Bilddatei auswählen? on Mon, 02 Aug 2010 21:37:55 GMT]]></title><description><![CDATA[<p>Das sieht sehr nach C aus .... malloc und so sind ein sicherer Hinweis ... schau dir mal std::vector und Konsorten an <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> oder Übergabe per Reference für arrays und co.</p>
<p>statt <code>for (int i=0; i &lt;= (irgendwas-1); i++)</code> besser <code>for (int i=0; i &lt; irgendwas; ++i)</code> . Nimm pre-inc statt post-inc (ist besser)<br />
statt <code>J,I</code> lieber <code>deltaX, deltaY</code></p>
<p>Statt mit dem Rungesobele 9 bytes zu sparen definier dir 2 Filter oder (besser da lerneffekt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ) du schaust (und rechnest händisch) nochmal nach was</p>
<pre><code class="language-cpp">// X-Gradienten Approximation
               for(J=-1; J&lt;=1; J++)  
               {
                   for(I=-1; I&lt;=1; I++)  
                   {
                      sumX = sumX + (int)( (*(originalImage +(y + J)*columns + x + I )) * (*(pGX + (J+1)*3 + (I+1)) ));
                   }
               }

               if(sumX&gt;255)  sumX=255;
               if(sumX&lt;0)    sumX=0;               

               // Y-Gradienten Approximation
               for(I=-1; I&lt;=1; I++)  
               {
                   for(J=-1; J&lt;=1; J++)  
                   {
                      sumY = sumY + (int) ( (*(originalImage + (y + J)*columns) + x + I) * (*(pGY + (J+1)*3 + (I+1)) ));
                   }
               }
</code></pre>
<p>machen ... mein Gefühl sagt mir das du die Sysmetrie des Filters nicht ganz richtig umgesetzt hast (mal dir 3 mal 3x3 auf, in den Ersten den Sobel und konstruier die anderen so wie die Schleifen den reinsetzen dann weisst du auch warum das zZ keinen Unterschied macht).</p>
<p>Der threshold gehört mE variabel in den Funktionsaufruf .. oder ganz ausgelagert ... und warum begrenzt du deine sumX sumY zum einen den Wert und zum anderen Normalisierst du sie? Ich würde die Begrenzung mal rausnehmen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935360</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Mon, 02 Aug 2010 21:37:55 GMT</pubDate></item></channel></rss>