Betrachter Graß rauchen lassen

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
joggel

Re: Betrachter Graß rauchen lassen

Beitrag von joggel »

Ich bin entsetzt......
Den Betrachter auf Drogen schicken lassen..... könnte interessant werden.
Naja, wenn das BTMG nix davon mitbekommt ;) ...

Nein, ich habe mir auchschon öfters mal sowas gedacht.

Ohne OpenGL oder DirectX zu verwenden.... mann müsste halt Filter (Blur zum Beispiel) direkt auf die Bilddaten anwenden!
Benutzeravatar
The_Real_Black
Establishment
Beiträge: 110
Registriert: 19.01.2008, 19:57
Benutzertext: Happy Coding
Kontaktdaten:

Re: Betrachter Graß rauchen lassen

Beitrag von The_Real_Black »

http://de.wikipedia.org/wiki/Bildverarbeitung

Man könnte einen "Gauss Filter" für das Verschwommene verwenden. zB Maske 7*7 und diesen 3 bis 4 mal auf das Bild anwenden. Die passenen Stichwörter sind hier OpenCV und EmguCV wenn man Bilder verarbeiten will. Wenn man ein Bild Farblich verändern will sollte man Look Up Table (LUT) verwenden.

Als kleine Testanwendung rein in C# habe ich mal meine eigene CV Klassen geschrieben. Hier mal ein Link auf meine Projekt-Seite:
http://www.therealblack.net/projekte.html
und ein Beispielbild (Kantenerkennung):
http://www.therealblack.net/Picture/MyCV_V12.jpg

Ein Gaußfilter setzt sich hier dann aus einer Maske mit den Werten
121
242
121
geteilt durch 16 zusammen. Mit dem Tool lässt sich aber auch jede andere Make die einen einfällt realisieren. (Achtung ab einer 8*8 Matrix wird mein Tool "etwas" langsam ^^) Ohne Code und Selbst gebastelten Tools würde ich zu Photoimpact oder einen anderen Bildbearbeitungsprogramm raten, denn dort bekommt man jede menge an Filtern die man sich nur schwer selbst basteln kann.
Happy Coding.
[none]
Beiträge: 22
Registriert: 17.12.2004, 15:55
Kontaktdaten:

Re: Betrachter Graß rauchen lassen

Beitrag von [none] »

The_Real_Black hat geschrieben:Die passenen Stichwörter sind hier OpenCV und EmguCV
Das sind genau die falschen Stichwörter. Einen separablen Gauss hat man in 5min implementiert, mit SSE dauert das dann nochmal 10min. Wer dafür den Overhead einer solchen Lib in Kauf nimmt ist ohnehin verloren.
Alexander Kornrumpf
Moderator
Beiträge: 2112
Registriert: 25.02.2009, 13:37

Re: Betrachter Graß rauchen lassen

Beitrag von Alexander Kornrumpf »

Gauss ist an sich schon das völlig falsche Stichwort.

Ich glaube nicht das irgendeine Droge die Welt weichzeichnet. Was für eine Art Kick soll das denn sein?
Weichzeichnen macht das Gehirn doch sowieso die ganze Zeit, oder wann hast du dich zuletzt geärgert, dass die Welt verrauscht (von Rauschen, nicht von Rausch) aussieht?

Ich denke man sollte sich an der Darstellung von Drogentrips in Filmen (Easy Rider, The Big Lebowski und Pulp Fiction würden mir spontan einfallen) orientieren, da die Erwartung der Betrachter wie ein Drogentrip aussehen muss wohl eher aus solchen Filmen stammt als von echten Drogentrips.

EDIT: Wenn es nur um Bitmaps geht würde ich doch einfach ein wenig mit TheGimp o.ä. herumspielen und gar nichts selbst programmieren.
joggel

Re: Betrachter Graß rauchen lassen

Beitrag von joggel »

Ich denke was auch etwas "trippisch" aussieht, sind so Farbveränderungen!
"Fear and loading Las Vegas" hat auch gute Trip-Effekte, finde ich!

[Edit]
Farbveränderung:
Das man zum Beispiel von TrueColor auf 16 Faben runtergeht. Und die 16 Farben sind aber absolut nicht gleich!
Das Bild würde dann langsam knallbunt werden...
[none]
Beiträge: 22
Registriert: 17.12.2004, 15:55
Kontaktdaten:

Re: Betrachter Graß rauchen lassen

Beitrag von [none] »

Alexander Kornrumpf hat geschrieben: Ich glaube nicht das irgendeine Droge die Welt weichzeichnet.
Das ist eine klassische Wirkung von Drogen.
Alexander Kornrumpf
Moderator
Beiträge: 2112
Registriert: 25.02.2009, 13:37

Re: Betrachter Graß rauchen lassen

Beitrag von Alexander Kornrumpf »

Ernsthaft?
Benutzeravatar
TGGC
Establishment
Beiträge: 569
Registriert: 15.05.2009, 18:14
Benutzertext: Ich _bin_ es.
Alter Benutzername: TGGC
Echter Name: Ich _bin_ es.
Wohnort: Mainz
Kontaktdaten:

Re: Betrachter Graß rauchen lassen

Beitrag von TGGC »

Daher wohl der Name "weiche Drogen"?
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Betrachter Graß rauchen lassen

Beitrag von CodingCat »

Das scharfe S in "Graß" zeichnet jedenfalls keine Droge dieser Welt mehr weich.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Alexander Kornrumpf
Moderator
Beiträge: 2112
Registriert: 25.02.2009, 13:37

Re: Betrachter Graß rauchen lassen

Beitrag von Alexander Kornrumpf »

Aber vielleicht ein Gaußfilter. Die Ähnlichkeit zwischen Graß und Gauß ist sicher kein Zufall.

Mich würde aber eine Neurophysiologische Erklärung für den Effekt interessieren. Deaktiviert die Droge gezielt die Neuronen, die für die Wahrnehmung hoher Frequenzen da sind, oder arbeitet das Hirn als ganzes einfach langsamer und dadurch erscheinen alle Frequenzen tiefer? Wenn letzteres ist ein Tiefpassfilter ja eigentlich nicht das richtige sondern das Spektrum müsste als ganzes verschoben werden.
Benutzeravatar
Krishty
Establishment
Beiträge: 8239
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Betrachter Graß rauchen lassen

Beitrag von Krishty »

Alexander Kornrumpf hat geschrieben:Deaktiviert die Droge gezielt die Neuronen, die für die Wahrnehmung hoher Frequenzen da sind, oder arbeitet das Hirn als ganzes einfach langsamer und dadurch erscheinen alle Frequenzen tiefer? Wenn letzteres ist ein Tiefpassfilter ja eigentlich nicht das richtige sondern das Spektrum müsste als ganzes verschoben werden.
Ich würde sagen, dass es schon viel früher anfängt – mit der Motorik wird eben auch die Augenmuskulatur beeinflusst und deshalb gelingt das Fokussieren einfach nicht mehr (so kenne ich das jedenfalls auch von anderen Drogen). Wie man an den Pupillen sieht ist der Lichteinfall und damit die Reizintensität auf der Netzhaut auch nicht mehr unter Kontrolle. Danach kommen dann erst neuropsychologische Aspekte, die alles verwabern und Schlieren ziehen lassen; das Rausfiltern von eingebrannten hellen Bildern, das die ganze Zeit über unbewusst geschieht, will auch nicht mehr so recht und schon sieht man Polizisten mit Mustern drauf.
TGGC hat geschrieben:Daher wohl der Name "weiche Drogen"?
Ich habe so gelacht :D

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Alexander Kornrumpf
Moderator
Beiträge: 2112
Registriert: 25.02.2009, 13:37

Re: Betrachter Graß rauchen lassen

Beitrag von Alexander Kornrumpf »

Interessant.
Ich denke bei Gauss eigentlich automatisch Rauschunterdrückung und habe gar nicht darüber nachgedacht dass eine nicht fokussierte Optik von vornherein gar nicht in der Lage sein könnte hochfrequente Details zu registrieren. Letztenendes glaube ich aber dass der Original Poster auch mehr an den späteren Verarbeitungsschritten interessiert war. Die Optik zu lädieren ist ja erstmal nicht so besonders spannend, ob Drogeniduziert oder sonstwie. Wäre dies der einzige Effekt von Drogen, wüsste ich nicht, warum jemand dies bei sich selbst künstlich herbeiführen wollen sollte.
joggel

Re: Betrachter Graß rauchen lassen

Beitrag von joggel »

Mich würde mal interessieren, in welchem Zusammenhang die Optik entstehen soll.
Ein Spiel: Spieler nimmt Steroide ==> Effekt ...?
Demo: Trip-Demo?

Spezialisierung: Optikeffekt beim Grasrauchen? Oder ist allgemein eine Optik erwünscht, die nach einem Trip aussehen soll?

The_Real_Black: Wie würde die Farbveränderung mit einem Look-up-Table funktionieren, oder was ist genau damit gemeint?

Gruß ...
Benutzeravatar
Krishty
Establishment
Beiträge: 8239
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Betrachter Graß rauchen lassen

Beitrag von Krishty »

joggel hat geschrieben:The_Real_Black: Wie würde die Farbveränderung mit einem Look-up-Table funktionieren, oder was ist genau damit gemeint?
Man legt 256 Helligkeitswerte an, die aber nicht linear sind, sondern z.B. erst schwarz, dann heller, dann wieder dunkler und wieder hell. Oder erst hell, dann dunkel. Usw, jedenfalls drei möglichst verschiedene. Dann benutzt man die ursprünglichen RGB-Werte des Bildes als Indizes auf diese drei Lookups und bekommt dadurch ein neues Bild, das – je nachdem, wie die Helligkeitsverteilung in den Lookups gewählt ist – ziemlich verrückt aussehen kann; etwa so, als hätte man bei einem palettierten Bild die Palette ausgetauscht (wie es Mandelbrot-Renderer gerne tun).

Das Ganze geht natürlich auch genauso gut ohne Lookup, wenn sich die Helligkeitsverläufe mathematisch beschreiben lassen. Mit ist aber einfacher. Wenn man es professionell haben will, kann man auch 3D-Lookups verwenden: http://www.lightillusion.com/usingluts.htm .
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
The_Real_Black
Establishment
Beiträge: 110
Registriert: 19.01.2008, 19:57
Benutzertext: Happy Coding
Kontaktdaten:

Re: Betrachter Graß rauchen lassen

Beitrag von The_Real_Black »

Krishty hat geschrieben:
joggel hat geschrieben:The_Real_Black: Wie würde die Farbveränderung mit einem Look-up-Table funktionieren, oder was ist genau damit gemeint?
Man legt 256 Helligkeitswerte an, die aber nicht linear sind, sondern z.B. erst schwarz, dann heller, dann wieder dunkler und wieder hell. Oder erst hell, dann dunkel. Usw, jedenfalls drei möglichst verschiedene. Dann benutzt man die ursprünglichen RGB-Werte des Bildes als Indizes auf diese drei Lookups und bekommt dadurch ein neues Bild, das – je nachdem, wie die Helligkeitsverteilung in den Lookups gewählt ist – ziemlich verrückt aussehen kann; etwa so, als hätte man bei einem palettierten Bild die Palette ausgetauscht (wie es Mandelbrot-Renderer gerne tun).
Genau so wie oben beschrieben, aber man muss ja nicht eine Lut auf ein ganzes Bild anwenden sondern kann sie auch partiell anwenden, auch wenn dies nicht ganz einer Bildverarbeitung entspricht. Man muss aber nicht nur auf einen der RGB Kanäle eine LUT anwenden sondern man kann sie auch auf HSV anwenden. Wenn man mit dem H Kanal die Farbe verändert bekommt man auch interesante Effekte.

http://de.wikipedia.org/wiki/HSV-Farbraum

Wenn euch allen ein Weichzeichner und eine Farbverschiebung noch nicht genug ist könnte man auch alles Partiell anwenden, dies muss man aber auch Weich ins Bild einbauen. Ein Beispiel ist auf dem Bild Punkte festlegen die Abhängig vom Radius die aktuelle Farbe verschieben bzw mehr Weichzeichen. Alles könnte man auch mit verschiedenen Formeln bestimmen dabei macht ein Sinus auch schöne Effekte, aber ist dies nicht alles mit Kanonen auf Spatzen schießen?

@Yeti: Wie viele Bilder möchtest du verarbeiten? Eins, Hundert ein Video voll? Wenn man ein Video nehmen würde könnte man auch verschiedene Bilder überlagern bzw die Letzten auf addieren um "die Bewegungen zu sehen".

Ein Paar Drogen Tripps aus Computerspielen als Vergleich: Stalker dort wird ein Bild drei bis 4 mal versetzt überlagert um ein Doppeltsehen zu erreichen. Bei Gothic wird auch das Bild unscharf dort hat man aber auch eine Bewegung im Bild.

@[none]: Was für einen "Overhead" alles nützliche Funktionen und Klassen besonders wenn man im HSV Raum arbeiten will, denn da stößt man mit standard Klassen leider auf seine Grenzen. Ansonsten hast du recht einen Gauss Filter könnte man im RGB Raum auch "freihand" Programmieren.
Happy Coding.
Benutzeravatar
Krishty
Establishment
Beiträge: 8239
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Betrachter Graß rauchen lassen

Beitrag von Krishty »

Yeti hat geschrieben:sizeof(BITMAPINFOHEADER) gibt 16 statt 14 aus - woran liegt es?
Du meinst BITMAPFILEHEADER? Der Compiler fügt Padding ein, um das Alignment der einzelnen Member aufrecht zu erhalten. Benutz lieber die vorbereiteten Strukturen aus der <Windows.h>, die funktionieren garantiert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8239
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Betrachter Graß rauchen lassen

Beitrag von Krishty »

Auch dort wird es irgendwelche Header geben, die schon passende Datenstrukturen definiert haben. Im Zweifel bleibt das packed-Attribut, um Padding zu unterdrücken.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4256
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Betrachter Graß rauchen lassen

Beitrag von Chromanoid »

SDL_LockSurface(surface)
dann surface->pixels
nach lesen
SDL_UnlockSurface(surface)
das lock ist ggf. nicht nötig...
dronus
Establishment
Beiträge: 114
Registriert: 11.01.2010, 01:53

Re: Betrachter Graß rauchen lassen

Beitrag von dronus »

Ich würde vielleich das Bild etwas mit Sin/Cos verzerren (etwa eine Welle über der Bildbreite/Höhe und die mit der Zeit schwingen lassen), dabei ist es sehr gut die Farbkanäle aufzutrennen. Das sieht dann nach LSD aus. Ich hatte ein kaputtes CRT, bei dem die R, G und B Bilder verschieden groß waren, wenn man da Unreal oder so gespielt hat, wurde man in ein Regenbogensprühendes zoomeerlebnis geworfen, das stark an Fear and Loathing oder die LSD-Sequenz von Easy Rider, nur heftiger erinnerte: http://www.hirnsohle.de/photo.php?tag=hallu

Was ich auch mal probiert hab, sah sehr drogig aus, das" Game Of Life" als Shader in R, G, B getrennt mit dem laufenden 3d-Bild als Zusatzinput. Da spratzeln alle möglichen bunten geometrischen Orgien von den Objektkonturen los...
joggel

Re: Betrachter Graß rauchen lassen

Beitrag von joggel »

Wie realisierst Du es?
Welche API verwendest Du?

Gruß...
Benutzeravatar
Krishty
Establishment
Beiträge: 8239
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Betrachter Graß rauchen lassen

Beitrag von Krishty »

BMPs sind an vier Bytes ausgerichtet; du musst die Größe einer Zeile, in Bytes, also auf das nächste Vielfache von vier aufrunden.

// Wenn du mit Bilddaten arbeitest brauchst du eh an allen Ecken und Enden Alignment, also heb die Funktion gut auf
template <
    typename CInteger
> CInteger CeiledIntegerDivision(
    CInteger const Dividend,
    CInteger const Divisor
) {
    // Falls du Type-Traits hast, gehört hier noch ein static_assert hin, dass CInteger auch wirklich ein Integer-Typ ist
    return (Dividend + Divisor - 1) / Divisor;
}

long specifferPixel(int x, int y, int z) {
    long const lineSize = CeiledIntegerDivision(headers.biWidth * 3, long(4)); // long explizit angeben weil das Template sonst unterschiedliche Parametertypen hätte
    return (y * lineSize) + (3 * x) + z;
}


Was modX bedeutet, wusste ich gerade nicht, also habe ich es weggelassen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8239
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Betrachter Graß rauchen lassen

Beitrag von Krishty »

Wenn du mit dem Einlesen der Zeile fertig bist, berechnest du die bisherige Breite der Zeile in Bytes und überspringst so viele Bytes, bis diese Zahl glatt durch vier teilbar ist.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8239
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Betrachter Graß rauchen lassen

Beitrag von Krishty »

KA, was du da machst, aber normalerweise geht man so vor (ohne Gewähr weil aus dem Kopf):

for(char const * toCurrentBMPData = toBMPData, long y = 0; y < height; ++y) {
    // Zeile kopieren
    for(long x = 0; x < width; ++x)
        pixels[y * height + x].b = *toCurrentBMPData++,
        pixels[y * height + x].g = *toCurrentBMPData++,
        pixels[y * height + x].r = *toCurrentBMPData++;

    // An vier Bytes ausrichten (geht auch ohne Schleife; ist so klarer)
    while((toCurrentBMPData - toBMPData) % 4)
        ++toCurrentBMPData;
}
Zuletzt geändert von Krishty am 31.10.2010, 21:34, insgesamt 1-mal geändert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

Re: Betrachter Graß rauchen lassen

Beitrag von exploid »

Thema verfehlt und daher von mir zurückgezogen!
Zuletzt geändert von exploid am 01.11.2010, 23:05, insgesamt 1-mal geändert.
All your base are belong to us! Justice
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Betrachter Graß rauchen lassen

Beitrag von Aramis »

Wie kompliziert. Schonmal dran gedacht per Post an alle Spieler ein Beutelchen mit einer der erwaehnten Substanzen zu verschicken und zum richtigen Zeitpunkt Hinweise auf dem Bildschirm einzublenden und den Spieler zur Einnahme zu zwingen? (ggf. akustischer Hinweis fuer junge Katzen).

Muss man natuerlich gut timen, denn die Erregungsleitung der Neuronen ist wunderbar langsam wenn ich mir mal erlauben darf eine Zelle als langsam zu bezeichnen. Ausserdem haengt das Zeitdelta zwischen Aufnahme der Substanz und der zu erwartenden Wirkung (Nicht-Euklidischer Raum, Siedetemperaturwinkelsumme von Wasser nicht ganz 90 Grad etc.) natuerlich auch von der antrainierten Reizimmunitaet der Spieler ab.
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

Re: Betrachter Graß rauchen lassen

Beitrag von exploid »

Thema verfehlt und daher von mir zurückgezogen!
Zuletzt geändert von exploid am 01.11.2010, 23:06, insgesamt 1-mal geändert.
All your base are belong to us! Justice
Alexander Kornrumpf
Moderator
Beiträge: 2112
Registriert: 25.02.2009, 13:37

Re: Betrachter Graß rauchen lassen

Beitrag von Alexander Kornrumpf »

Gehts noch?
Antworten