Forum: PC-Programmierung Bilder verkleinern


von Mathias B. (dedi)


Lesenswert?

Hallo,

ich brauche mal einen Tipp von euch, ich habe ein Graustufen Bild in 
einer  n x n Matrix vorliegen. Das Bild möchte ich um den Faktor 2 
verkleinern. Wie komme ich nun auf den Wert eines Pixels?

Angenommen ich habe einen Block aus vier Pixeln

1  2

3  4

Kann ich den neuen Wert von 1 mit (1 + 2 + 3 + 4) / 4 berechnen, oder?

von widf (Gast)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

Mathias Braun schrieb:

> verkleinern. Wie komme ich nun auf den Wert eines Pixels?
>
> Angenommen ich habe einen Block aus vier Pixeln
>
> 1  2
>
> 3  4
>
> Kann ich den neuen Wert von 1 mit (1 + 2 + 3 + 4) / 4 berechnen, oder?

Wer will dich daran hindern?

Du kannst mit den Pixeln machen, was immer du willst.

Du kannst auch für jedes enstehende Pixel grundsätzlich immer nur das 
1-Pixel aus dem Originalblock nehmen.

Du kannst auch im Original einen 4*4 Block nehmen und von dem den 
Mittelwert nehmen, arithmetisches Mittel, geometrisches Mittel.

Du kannst ...

Niemand hindert dich daran.

von S. B. (Gast)


Lesenswert?

> Kann ich den neuen Wert von 1 mit (1 + 2 + 3 + 4) / 4 berechnen, oder?
Das Ergebnis soll dann das Pixel mit dem neuen Graustufenwert sein?
im Prinzip ja, nur ist das rechentechnisch viel zu aufwendig.
Warum das Rad neu erfinden?

> ich habe ein Graustufen Bild in
> einer  n x n Matrix vorliegen. Das Bild möchte ich um den Faktor 2
> verkleinern.
copy and paste, umtransformieren in jpeg und dann:
http://scaleyourimage.com/
fertig.

von Mathias B. (dedi)


Lesenswert?

S. B. schrieb:
> im Prinzip ja, nur ist das rechentechnisch viel zu aufwendig.

Eine Addition soll rechentechnisch aufwändiger sein, als die Matrix 
wieder in ein JPEG Bild zu verwandeln, es durchs Netz zu schicken, es 
empfangen und wieder in eine Matrix zurück verwandeln??

von S. B. (Gast)


Lesenswert?

> Eine Addition soll rechentechnisch aufwändiger sein, als die Matrix
> wieder in ein JPEG Bild zu verwandeln, es durchs Netz zu schicken, es
> empfangen und wieder in eine Matrix zurück verwandeln?
Du hast offenbar vergessen, daß Du diese Berechnung jeweils pro "neuen" 
Pixel durchführen mußt! Aus wieviel Pixeln besteht denn Deine Matrix 
überhaupt?
Die Anzahl Deiner Graustufen und die Größe Deiner n*n Matrix kenne ich 
nicht.
Bitteschön, wenn Du meinst das es einfacher ist, mach es doch - es 
hindert Dich ja keiner daran.

von S. B. (Gast)


Lesenswert?

Wahrscheinlich gibt es sogar noch einen besseren, schnelleren 
Algorithmus, je nachdem wie hoch Deine Qualitätsanforderungen, etc. 
sind?

von Mathias B. (dedi)


Lesenswert?

S. B. schrieb:
> Wahrscheinlich gibt es sogar noch einen besseren, schnelleren
> Algorithmus, je nachdem wie hoch Deine Qualitätsanforderungen, etc.
> sind?

Ich halte es für relativ unwahrscheinlich, dass es einen Algorithmus 
gibt, der schneller als O(n²) arbeitet.

Auch wenn ein Bild 100.000x100.000 Pixel => 10 Gigapixel groß ist, wird 
ein CPU Kern das Ding innerhalb von einer Sekunde berechnen.

Außerdem hast du ebenso einen Aufwand von O(n²) für das Umwandeln der 
Matrix in ein Bild und wieder zurück. Zuzüglich der Berechnung auf dem 
fremden Server.

von S. B. (Gast)


Lesenswert?

> Ich halte es für relativ unwahrscheinlich, dass es einen Algorithmus
> gibt, der schneller als O(n²) arbeitet.
Das ist dann aber nur die Zeit für den Algorithmus für die 
Pixelneuberechnung, jetzt kommen noch die anderen Zeiten für die 
Anordnung, Ausgabe, usw. hinzu und das pro Bild.

Programmiere es Dir und mache einen Zeitvergleich - nur so wirst Du 
herausfinden, ob alles so klappt wie Du denkst.
Klar, Programmierung ist die bessere Lösung in Bezug auf die Zeit.
Widf hat ja schon auf Wiki verwiesen - Bildverarbeitung ist ein 
umfangreiches Gebiet genau wie Sortieralgorithmen.

Ich habe lediglich eine nichtkommerzielle Variante aufgezeigt, die im 
Prinzip jeder durchführen kann.
Wenn Du es besser kannst, setze es um.

von Dimitri R. (Firma: port29 GmbH) (port29) Benutzerseite


Lesenswert?

S. B. schrieb:
> nur ist das rechentechnisch viel zu aufwendig

Kannst du das mal bitte näher beschreiben. Deine Behauptungen bisher 
überzeugen mich noch nicht.

Karl heinz Buchegger schrieb:
> Du kannst auch für jedes enstehende Pixel grundsätzlich immer nur das
> 1-Pixel aus dem Originalblock nehmen.

Es ist durchaus klar, dass es bei einer Verkleinerung eines Bildes zu 
einem Datenverlusst kommt und das ursprüngliche Bild verfälscht wird. 
Bei deiner beschriebenen Methode ist die verfälschung so stark, dass ich 
deine Lösung in einer Klausur evtl. sogar als falsch werten würde. Ich 
möchte dir auch sagen wieso:

Nehmen wir mal ein Schachbrett, wobei jedes Feld genau einem Pixel 
entspricht. Nach deiner Methode wäre das verkleinerte Bild entweder 
komplett Schwarz oder Weiß. Das entspricht jedoch nicht der Realität. 
Mit der Lösung von Mathias wäre es Grau - besser aber immer noch nicht 
ganz richtig. Wenn man es richtig machen will, dann muss man das Bild 
zunächst einmal über entsprechende Gradientenfilter jagen um eine 
Gewichtung der einzelnen Pixel zu bekommen. Nach so einer Verkleinerung 
entsteht dann ein z.T. verrauscht aussehendes Bild, das jedoch viel mehr 
details enthält, als nach euren Methoden.

von Phil J. (sunflower_seed)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

Dimitri Roschkowski schrieb:

> Es ist durchaus klar, dass es bei einer Verkleinerung eines Bildes zu
> einem Datenverlusst kommt und das ursprüngliche Bild verfälscht wird.
> Bei deiner beschriebenen Methode ist die verfälschung so stark, dass ich
> deine Lösung in einer Klausur evtl. sogar als falsch werten würde. Ich
> möchte dir auch sagen wieso:

Da hast mich misverstanden.
Meine Antwort war zu lesen als:
Wenn du der Ansicht bist, das ein arithmetisches Mittel zur 
Verkleinerung taugt, dann nimm sie. Wenn du denkst das ist nicht das was 
du willst, dann musst du dir was anderes überlegen. Vielleicht will er 
bilinear Filter oder ein Gaussfilter oder eine andere Filterthematik 
benutzen.

Aber eines ist sicher: Es gibt kein richtig und kein falsch. Was in 
deiner Situation funktioniert, musst du selber wissen.

> Bei deiner beschriebenen Methode ist die verfälschung so stark, dass ich
> deine Lösung in einer Klausur evtl

Das kommt ja dann wohl darauf an, um welche Vorlesung es sich handelt 
und ob in der Vorlesung Filtertechniken besprochen wurden :-)

Und an S.B

> nur ist das rechentechnisch viel zu aufwendig

Was soll denn das für ein Algorithmus sein?
"Lade das Bild auf einen Server und hol dir von dort das Ergebnis ab"

von S. B. (Gast)


Lesenswert?

> Und an S.B
> Was soll denn das für ein Algorithmus sein?
> "Lade das Bild auf einen Server und hol dir von dort das Ergebnis ab"

gar keiner - die Fragestellung war nicht primär der Algorithmus, sondern 
"Bilder verkleinern"!
Also eine Frage für Leute, die zu schnellen Ergebnissen kommen möchten - 
so habe ich das zumindest verstanden - das ist eine "nichtkommerzielle" 
primitive Lösung des Problems.
Bisweilen sind primitive Lösungen auch gar nicht so schlecht - sie 
führen zu einem Ergebnis.
Eine Zeitmessung ist hier offenbar jedem zu aufwändig ?!

Weiterhin:
Der Fragesteller hatte ja nach der Richtigkeit seines Algorithmuses 
gefragt, habe ich auch beantwortet.
Bitteschön, jetzt liegt es an ihm das zu programmieren.
Sein Algorithmus kann funktionieren, ich finde ihn zeitaufwendig ... das 
kommt naürlich auf die Definitionen (Pixelgröße, Abtastrate) und 
insbeondere Ausgangsvorraussetzungen an - diese kennt aber nur der 
Fragesteller und gibt sie uns nur scheibchenweise bekannt!
Es gibt auch andere Algorithmen.
Offenbar scheint dieser Rechenweg ja nicht immer so gut zu 
funktionieren?

Es kommen ja auch noch andere Faktoren wie Bildein- /ausgabefunktion, 
usw. hinzu.(da wären wir dann wieder bei der Zeitmessung, siehe oben).
Nicht umsonst gibt es kommerzielle Programme.

Ich mache doch nicht Nachhilfeunterricht für einen Prof. und seinen 
Diplomanden ?!
Oder was soll das hier sein bzw. werden?


> Nehmen wir mal ein Schachbrett, wobei jedes Feld genau einem Pixel
> entspricht. Nach deiner Methode wäre das verkleinerte Bild entweder
> komplett Schwarz oder Weiß. Das entspricht jedoch nicht der Realität.
> Mit der Lösung von Mathias wäre es Grau
so, so - macht Euch mal mit den Grundlagen vertraut - wie ist denn 
überhaupt ein Pixel definiert ?!
http://de.wikipedia.org/wiki/Pixel

von Dimitri R. (Firma: port29 GmbH) (port29) Benutzerseite


Lesenswert?

S. B. schrieb:
> Eine Zeitmessung ist hier offenbar jedem zu aufwändig ?!

Offenbar können hier alle anderen schon direkt abschätzen, was schneller 
sein wird. Und es wird nicht das sein, was du denkst.

S. B. schrieb:
> Sein Algorithmus kann funktionieren, ich finde ihn zeitaufwendig ...

Begründe das mal bitte. Wie kann man deiner Meinung nach schneller zu 
einem Ergebnis kommen, ohne dabei massivst an Bildinformationen zu 
verlieren?

S. B. schrieb:
> Ich mache doch nicht Nachhilfeunterricht für einen Prof. und seinen
> Diplomanden ?!
> Oder was soll das hier sein bzw. werden?

Das wird von dir auch nicht verlangt. Du hast aber eine These 
aufgestellt, jetzt musst du auch akzeptieren, dass deine These 
angegriffen wird.

von Karl H. (kbuchegg)


Lesenswert?

S. B. schrieb:

> gar keiner - die Fragestellung war nicht primär der Algorithmus, sondern
> "Bilder verkleinern"!

Die Fragestellung war:

 * Er hat B/W Bild in einer n*n Matrix vorliegen.
   Offenbar eine Programmiersprache in der es Matrizen oder zumindest
   2D-Arrays gibt.

 * Wie erhalte ich den Wert eines neuen Pixels

> Also eine Frage für Leute, die zu schnellen Ergebnissen kommen möchten -

ganz ehrlich:
Wenn ich ein schnelles Ergebnis haben will, dann fahr ich das 
Bildbearbeitungsprogramm meiner Wahl, und sei es nur MS-Paint hoch und 
verkleinere dort das Bild um den Faktor 2

> so habe ich das zumindest verstanden - das ist eine "nichtkommerzielle"
> primitive Lösung des Problems.
> Bisweilen sind primitive Lösungen auch gar nicht so schlecht - sie
> führen zu einem Ergebnis.
> Eine Zeitmessung ist hier offenbar jedem zu aufwändig ?!

Deiner Schätzung nach:

  wie lange dauert es, bis er in seiner Grafik-Lib die Funktion
  gefunden hat, die seine n*n Matrix als Bilddatei abspeichert.

  Wie lange dauert es wohl, bis er rausgefunden hat, wie man per
  Programm eine bestimmte Datei an besagte Web-Site übergibt und
  die so manipuliert, das der Server das Bild runterrechnet

  wie lange dauert es wohl, bis er soweit ist, sich das Ergebnis
  mit seinem Programm wieder zu holen.

  und warum, wenn er sowieso schon eine Grafik Lib benutzt, die
  die Speicherung und das Lesen in einem bestimmten Format unterstützt,
  hat diese sch.... Library keine Funktion um ein Bild zu resampeln?


Soviel zum Thema aufwändig.

Es geht darum, dass jemand etwas programmieren will! Er schreibt ein 
Programm! Er hat die Bilddaten schon im Speicher!
Und nicht darum, das jemand zu dämlich ist, seine lokale 
Bildverarbeitung anzuwerfen bzw. sich ein GIMP zu installieren.

von S. B. (Gast)


Lesenswert?

> Offenbar können hier alle anderen schon direkt abschätzen, was schneller
> sein wird. Und es wird nicht das sein, was du denkst.
Wenn Ihr alles besser wißt, wozu dann noch die Fragen?

> Begründe das mal bitte. Wie kann man deiner Meinung nach schneller zu
> einem Ergebnis kommen, ohne dabei massivst an Bildinformationen zu
> verlieren?
Wie gesagt, der Fragesteller wollte wissen, ob man den Algorithmus 
verwenden kann, ob er richtig ist.
Er ist richtig, aber auch zeitintensiv, da man eine hohe Abtastrate 
wählen muß.
Je höher die Auflösung, desto weniger Bildinformation geht verloren - 
deswegen machen die Kamerahersteller ja auch Werbung mit der Zahl der 
Megapixel.
Mach doch Deine Gradientenfiltermethode,etc. - ich bekomme kein Geld für 
das bestmögliche Lösungsergebnis, für mich gibt's hier Null zu gewinnen 
... im Gegenteil, da werden Lösungen sogar noch kritisiert.
Ja dann postet doch mal Eure Lösungen hier, ich hab noch nichts gesehen 
?!
Macht doch mal einen Zeit- und Ergebnisvergleich!

> Das wird von dir auch nicht verlangt. Du hast aber eine These
> aufgestellt, jetzt musst du auch akzeptieren, dass deine These
> angegriffen wird.
Dann müßt Ihr meine These kippen - ich habe Euch den Weg aufgezeigt, wie 
man das machen kann - mit Hilfe einer Zeitmessung - wo ist da eigentlich 
das Problem?
Weiterhin: Wie sieht denn das Ergebnis aus, offenbar scheint ja nicht 
alles zu funktionieren?
Meine "Idioten"-Methode funktioniert.

> Die Fragestellung war:
Und wie hieß der Thread? Schon vergessen?

> Er hat B/W Bild in einer n*n Matrix vorliegen.
>    Offenbar eine Programmiersprache in der es Matrizen oder zumindest
>    2D-Arrays gibt.

nur mal zur Erinnerung - DAS war die Fragestellung:
ich habe ein Graustufen Bild in
einer  n x n Matrix vorliegen. Das Bild möchte ich um den Faktor 2
verkleinern. Wie komme ich nun auf den Wert eines Pixels?

Was Du jetzt machst mit der "neuen" Fragestellung ist eine mögliche 
Interpretation.
Man kann auch weiter orakeln, daß es wohl um Bilderkennung gehen soll - 
wegen dem Schachbrett ? Deshalb wohl auch nur Graustufen ?

> ganz ehrlich:
> Wenn ich ein schnelles Ergebnis haben will, dann fahr ich das
> Bildbearbeitungsprogramm meiner Wahl, und sei es nur MS-Paint hoch und
> verkleinere dort das Bild um den Faktor 2

geht auch; erlaubt ist, was am Ende funktioniert - ich muß nicht den 
Designpreis mit meinem Lösungsvorschlag erringen.
Hast dann gewonnen, zufrieden?

> Deiner Schätzung nach:
>  wie lange dauert es .....
> und warum ...
und warum denn überhaupt Graustufen? Wieviele denn?
Verkleinerung um Faktor 2 - Längseite, beidseitig ?


Offenbar läuft dieses super n*n Matrix-Programm nur unzureichend.
Was weiß ich denn?
Nichts genaues weiß man hier.

Einfach die beste Lösung posten, wenn Du Sie aufgrund dieser 
Minimalangaben kennst !
... ich werd's nicht mehr tun, sondern überlasse Dir die Ehre.

Wenn Euch eine Lösung zu simpel ist, eine bessere vorschlagen, einen 
Vergleichstest machen ... offenbar zu schwierig.


> Es geht darum, dass jemand etwas programmieren will!
Dann muß er sich bemühen, die richtigen Fragen zu stellen.
Über welche Programmiersprache reden wir hier denn überhaupt?
Keiner weiß es.

> Er schreibt ein Programm! Er hat die Bilddaten schon im Speicher!
Das Programm ist schon längst fertig und läuft - aber nicht gut genug.
Er hat offenbar ein Grundlagenproblem, deshalb auch diese Frage - kein 
Programmierproblem.
Ich habe bisher keine Fragen zur Programmierung hier entdeckt, Du etwa?

> Und nicht darum, das jemand zu dämlich ist, seine lokale
> Bildverarbeitung anzuwerfen bzw. sich ein GIMP zu installieren.
Sein Programm muß zeit- und insbesondere im Ergebnis einem Malprogramm 
bzw. Freeware-Internetprogramm mindestens ebenbürtig sein, sonst kann er 
seine Diplomarbeit gleich versenken, meine Meinung.
Bisweilen muß man sich schon mal mit dämlichen Sachverhalten, die einen 
nicht in den Kram passen, auseindersetzen, so ist das nun einmal im 
Leben, leider.

von Karl H. (kbuchegg)


Lesenswert?

S. B. schrieb:

> Wie gesagt, der Fragesteller wollte wissen, ob man den Algorithmus
> verwenden kann, ob er richtig ist.
> Er ist richtig, aber auch zeitintensiv, da man eine hohe Abtastrate
> wählen muß.
> Je höher die Auflösung, desto weniger Bildinformation geht verloren -
> deswegen machen die Kamerahersteller ja auch Werbung mit der Zahl der
> Megapixel.

Irgendwie hab ich das Gefühl, du bist Spitze darin, Fragen zu 
beantworten die gar keiner gestellt hat.

> Macht doch mal einen Zeit- und Ergebnisvergleich!

Hab ich schon.
Der Zeitvergleich geht eindeutig zu deinen Ungunsten aus.
In der Zeit in der du dir die EInzelteile zusammensuchst um das Bild an 
den Server zu schicken zu können, sind die meisten Programmierer schon 
längst mit den beiden ineinander geschachtelten Schleifen fertig.


Und auch im laufenden Betrieb:
Bist du wirklich so naiv, das du denkst, du könntest einen auf meinem PC 
laufenden Bildfilter mit einem über TCP/IP erreichbaren Server schlagen, 
wo die Hin und Rückübertragung schon mehr Zeit kosten, als selbst die 
aufwändigste Filterung auf meinem lokalen PC?

Und was macht dann der Server?
er macht genau dasselbe, was ich auch lokal mit dem Bild machen könnte. 
Nur dass dann noch die Übertragungszeit noch mit dazu kommt.

> ich habe ein Graustufen Bild in
> einer  n x n Matrix vorliegen. Das Bild möchte ich um den Faktor 2
> verkleinern. Wie komme ich nun auf den Wert eines Pixels?
>
> Was Du jetzt machst mit der "neuen" Fragestellung ist eine mögliche
> Interpretation.

Nicht wirklich.

Dieses spezielle Forum hier trägt den Titel "PC-Programmierung"

> Man kann auch weiter orakeln, daß es wohl um Bilderkennung gehen soll -

Das orakelst du dir jetzt aber aus dem Kaffessatz.

> wegen dem Schachbrett ? Deshalb wohl auch nur Graustufen ?

Schon mal darüber nachgedacht, dass die Pixel auch einfach nur 
Visualisierungen von Messewerten sein könnten, die sein Programm von 
irgendwelchen Sensoren aufgenommen hat, und er einfach nur einen Weg 
braucht um einen Thumbnail oder eine kleinere Version davon zu erzeugen?

Nicht jedes 'Bild' entsteht dadurch, dass jemand mit einer Digitalkamera 
durch Wald und Flur läuft.

Du orakelst mir ein bischen viel.
Richte dich nach dem was in der ursprünglichen Fragestellung enthalten 
ist, entscheide dich ob du daraus eine Antwort bauen kannst, die dem 
Fragesteller weiterhilft, antworte ruhig auch mal ein wenig ironisch, 
aber mach weniger kaffeesatzlesen.

>> Es geht darum, dass jemand etwas programmieren will!
> Dann muß er sich bemühen, die richtigen Fragen zu stellen.
> Über welche Programmiersprache reden wir hier denn überhaupt?
> Keiner weiß es.

Müssen wir auch nicht.
Es ging einfach nur um die Fragestellung, ob arithmetisches Mittel ein 
geeignetes Mittel ist, um ein Bild auf die Hälfte der Auflösung zu 
bringen. Mehr wollte er nicht wissen.

>> Er schreibt ein Programm! Er hat die Bilddaten schon im Speicher!
> Das Programm ist schon längst fertig und läuft - aber nicht gut genug.

Das hat er nicht gesagt.

> Er hat offenbar ein Grundlagenproblem,
Mag sein.
Die meisten hätten es wahrscheinlich einfach ausprobiert. Vielleicht hat 
er es ausprobiert und einen Fehler gemacht und anstelle da jetzt einem 
Gespenst nachzulaufen wollte er eine Bestätigung haben, dass die Idee 
funktioniert.
Alles möglich.
Hat aber auch alles nichts mit dem zu tun, was du vorgeschlagen hast.

> Ich habe bisher keine Fragen zur Programmierung hier entdeckt, Du etwa?

Das mag vielleicht auch daran liegen, dass
"Schicks zu einem Server und lass es dort bearbeiten"
nicht wirklich ein Ansatz ist, denn die meisten 'Programmierer' 
bevorzugen würden. Das sind BWL-er Lösungsansätze, die ihnen von den 
Marketingfuzzis eingeredet werden. Also denjenigen, die Freitag 
Nachmittag einfach heimgehen, wenn die Kacke so richtig am dampfen ist, 
und die Techniker wieder mal in einer Nacht und Nebelaktion alles 
richten sollen.

Langer Rede, kurzer Sinn: Ich halte dich nicht für jemanden der etwas 
von Programmierung versteht. Dafür versuchst du jetzt deine Haut so gut 
es geht durch Aufzählen von Buzzwords zu retten.

von U.R. Schmitt (Gast)


Lesenswert?

Dimitri Roschkowski schrieb:
> Nehmen wir mal ein Schachbrett, wobei jedes Feld genau einem Pixel
> entspricht. Nach deiner Methode wäre das verkleinerte Bild entweder
> komplett Schwarz oder Weiß. Das entspricht jedoch nicht der Realität.
> Mit der Lösung von Mathias wäre es Grau - besser aber immer noch nicht
> ganz richtig. Wenn man es richtig machen will, dann muss man das Bild
> zunächst einmal über entsprechende Gradientenfilter jagen um eine
> Gewichtung der einzelnen Pixel zu bekommen. Nach so einer Verkleinerung
> entsteht dann ein z.T. verrauscht aussehendes Bild, das jedoch viel mehr
> details enthält, als nach euren Methoden.

Setzen Prof, 6!
Wenn ich ein Schachbrettmuster, das mit einem Pixel pro Feld abgetastet 
hatte nur noch mit einem Viertel der Auflösung darstellen will und dann 
nicht ein gleichmäßig graues Bild erhalte, dann ist alles was ich sehe 
Fehler.
Das ergibt sich schon durch das Abtasttheorem, da ich bei der neuen 
Auflösung den ursprünglichen Wechsel von Hell auf Dunkel gar nicht mehr 
sehen darf.
Also ist das Grau von Mathias die optimale Lösung und nicht eine 
suboptimale.
Die Lösung von Karl Keinz ist für dieses Problem maximal ungünstig, für 
ein Bild mit Helligkeitsunterschieden deren max. Frequenz deutlich 
unterhalb der maximal möglichen von Abtastung/2 ist aber durchaus 
brauchbar und viel schneller.

von Dimitri R. (Firma: port29 GmbH) (port29) Benutzerseite


Lesenswert?

Karl heinz Buchegger schrieb:
> Was soll denn das für ein Algorithmus sein?
> "Lade das Bild auf einen Server und hol dir von dort das Ergebnis ab"

Mache ich auch immer. Auf Neudeutsch schimpft es sich Cloud Computing. 
Allerdings mit einer größeren Last. ;)

S. B. schrieb:
> Dann müßt Ihr meine These kippen - ich habe Euch den Weg aufgezeigt, wie
> man das machen kann - mit Hilfe einer Zeitmessung - wo ist da eigentlich
> das Problem?

>#include <iostream>
>
>int main(){
>int n = 10000;
>int summe = 0;
>for(int i = 0; i < n; i++)
>        for(int j = 0; j < n; j++)
>                summe +=n;
>}

> dr@Sierra ~/test $ time ./a.out
>
> real  0m0.317s

Also ich habe 0.3 Sekunden für ein 100Megapixel Bild benötigt (1 CPU 
Core). Etwa die gleiche Zeit werde ich benötigen, um eine Datei 
auszulesen und auf der Festplatte zu speichern. Genau die gleiche Zeit, 
um die Datei wieder einzulesen + die Verkleinerung auf einem Server.

q.e.d.

S. B. schrieb:
> Einfach die beste Lösung posten, wenn Du Sie aufgrund dieser
> Minimalangaben kennst !

> Über welche Programmiersprache reden wir hier denn überhaupt?
> Keiner weiß es.
> und warum denn überhaupt Graustufen? Wieviele denn?
> Verkleinerung um Faktor 2 - Längseite, beidseitig ?

Es wurden alle Vorgaben geliefert. Ich frage mich, wieso du die 
hinterfragen musst. Die Programmiersprache ist auch egal.

S. B. schrieb:
> Sein Programm muß zeit- und insbesondere im Ergebnis einem Malprogramm
> bzw. Freeware-Internetprogramm mindestens ebenbürtig sein

Das sagt jetzt wer?

von S. B. (Gast)


Lesenswert?

> Irgendwie hab ich das Gefühl, du bist Spitze darin, Fragen zu
> beantworten die gar keiner gestellt hat.
Du hast recht, lohnt sich nicht.

> Dieses spezielle Forum hier trägt den Titel "PC-Programmierung"
Über welche Programmiersprache reden wir hier?
Hab da wohl die Fragen nicht richtig gelesen, sorry.

> Bist du wirklich so naiv, das du denkst, du könntest einen auf meinem PC
> laufenden Bildfilter
Du hast recht,

> Das orakelst du dir jetzt aber aus dem Kaffessatz
Du hast wie immer recht.
Deshalb überlasse ich Dir jetzt die Bühne in der Hoffnung auf einen 
guten Lösungsansatz für das Orakelsoft-Programm.
Ich gebe auf, hab leider keine Ahnung.

von S. B. (Gast)


Lesenswert?

> Ich frage mich, wieso du die hinterfragen musst.
Dann gibt's keine Probleme hinterher.
Spätestens beim GAU-User, der das Programm käuflich erwirbt, könnten 
diese (in anderer Form und bezogen auf andere Sachen natürlich) kommen.

> Die Programmiersprache ist auch egal.
das sieht Karl-Heinz wohl etwas anders, sonst dürfte ich am Ende wohl 
wieder teilnehmen :-)
Nein, lieber nicht - da nutze ich meine Zeit besser.

von Dimitri R. (Firma: port29 GmbH) (port29) Benutzerseite


Lesenswert?

U.R. Schmitt schrieb:
> Also ist das Grau von Mathias die optimale Lösung und nicht eine
> suboptimale.

Es ist trotzdem keine optimale Lösung. Wir sind uns darüber wohl einig, 
dass die vorhandene Information nicht ausreichend ist, um eine 
vernünftige Abtastung durchführen zu können. Aus diesem Grund wendet man 
hier Filter an. Die Filter verfälschen zwar das Bild, jedoch liefern die 
besseres Ergebnis, als die stumpfe Berechnung eines Mittelwertes. Wobei 
ich mit besser meine, dass man auf dem Bild immer noch ein Muster 
erkennen kann.

von Max (Gast)


Angehängte Dateien:

Lesenswert?

Habe das Problem in LabVIEW programmiert. ´Benötigt für ein 256*256 
Graubild 24ms.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Effizient implementiert dauert das wenige Mikrosekunden.

Die Diskussion ob so eine triviale Form der Bildskalierung rechnerisch 
zu aufwendig ist finde ich ziemlich absurd. Darüber hätte man zu 
XT-Zeiten diskutieren können.

von Rolf Magnus (Gast)


Lesenswert?

Dimitri Roschkowski schrieb:
> Es ist trotzdem keine optimale Lösung.

Es gibt keine optimale Lösung, weil das Herunterskalieren immer einen 
Informationsverlust mit sich bringt. "Informationsverlust" bedeutet 
schließlich, daß nachher wirklich Informationen nicht mehr da sind.

> Aus diesem Grund wendet man hier Filter an. Die Filter verfälschen zwar
> das Bild, jedoch liefern die besseres Ergebnis, als die stumpfe
> Berechnung eines Mittelwertes. Wobeiich mit besser meine, dass man auf
> dem Bild immer noch ein Muster erkennen kann.

Warum sind irgendwelche von Filtern durch Unzulänglichkeiten 
eingestreute Muster besser? Diese Muster haben ja nur indirekt mit dem 
Originalmuster zu tun und bringen dir eigentlich nichts.

Wenn ich durch eine "krumme" Skalierung schicke Moiree-Effekte bekomme, 
sind die auch nicht besser, nur weil ich dadurch ein Muster habe.

Andreas Schwarz schrieb:
> Die Diskussion ob so eine triviale Form der Bildskalierung rechnerisch
> zu aufwendig ist finde ich ziemlich absurd. Darüber hätte man zu
> XT-Zeiten diskutieren können.

Insbesondere, wenn als Alternative etwas vorgeschlagen wird, das eine 
Konvertierung nach JPEG voraussetzt, die alleine schon ein Vielfaches an 
Rechenzeit braucht.

von Karl H. (kbuchegg)


Lesenswert?

Rolf Magnus schrieb:

>> Die Diskussion ob so eine triviale Form der Bildskalierung rechnerisch
>> zu aufwendig ist finde ich ziemlich absurd. Darüber hätte man zu
>> XT-Zeiten diskutieren können.
>
> Insbesondere, wenn als Alternative etwas vorgeschlagen wird, das eine
> Konvertierung nach JPEG voraussetzt, die alleine schon ein Vielfaches an
> Rechenzeit braucht.

Und noch mehr Artefakte erzeugt, die nichts mit dem Original zu tun 
haben :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.