AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Besseres Random() - eure Vorschläge

Ein Thema von DieDolly · begonnen am 25. Nov 2019 · letzter Beitrag vom 8. Nov 2020
Antwort Antwort
Seite 3 von 5     123 45      
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#21

AW: Besseres Random() - eure Vorschläge

  Alt 28. Nov 2019, 08:10
Zitat:
Man kann Grafiken auch verkleinern.
Das ist eine ziemlich schlechte Idee bei Grafiken, bei denen es aufs Detail ankommt.
Besser als nix zu sehen... Und manchmal reicht es auch ein anderes Format zu wählen.
Das seh ich aber ganz anders. DieDolly hat das eigentlich völlig richtig gemacht. Erst als BMP erzeugt und dann als PNG umgewandelt. GIF wäre IMHO auch gegangen oder TIFF. Wobei keines davon einen wesentlichen Unterschied in der Dateigröße hätte bewirken können. Schließlich ging es ja absichtlich um Random Noise und der lässt sich für gewöhnlich nicht komprimieren. Man könnte auch sagen: Je geringer das Kompressionsverhältnis zwischen BMP und PNG, umso besser war der Random-Algo ^^

Dass es bei den hier verlinkten Bildern JPEG-Artefakte gibt deutet darauf hin, dass irgendwo, ob gewollt oder nicht, eine doppelte Konvertierung vorgenommen wurde. Wenn man ein Noise-PNG hochlädt, dieses dann erst in JPEG-Pixelpampe umgewandelt und dann wieder in PNG zurück konvertiert wird, dann ist das PNG hinterher tatsächlich kleiner als vorher. Nur ist die Aussagekraft im vorliegenden Fall fast Null. Das gleiche würde zutreffen, wenn man ein Bild in der Größe verändert: Pixelpampe.

Was mir beim Betrachten des Random-DEC-Bildes auffällt: Zumindest macht es in der zermatschten JPG-Darstellung den Eindruck als hätte der Algo einen hohen 0-Anteil. Es kommen jedenfalls wesentlich mehr dunkle Pixel (= niedrige Int-Werte) vor als bei den anderen. Ob die nun tatsächlich schwarz (= 0) oder nur sehr dunkel waren, kann man wegen der Pixelpampe nicht mehr beurteilen.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#22

AW: Besseres Random() - eure Vorschläge

  Alt 28. Nov 2019, 08:37
Hier noch einmal alles in Originalgröße und völlig unkomprimiert als BMP im Archiv. Es ist leider eine Sache der Unmöglichkeit diese Bilder auf img42.com hochzuladen.
Dort kann man angeblich Bilder unkomprimiert hochladen aber immer wenn ich ein 4MB-Bild dort hochlade, ist die Seite kurz darauf offline!
Hier im Forum kann ich gerade auch nichts hochladen. Deswegen so...

Teil 1 des Archivs
https://cdn.discordapp.com/attachmen.../Random.7z.001

Teil 2 des Archivs
https://cdn.discordapp.com/attachmen.../Random.7z.002
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.901 Beiträge
 
Delphi 12 Athens
 
#23

AW: Besseres Random() - eure Vorschläge

  Alt 28. Nov 2019, 09:42
bmp.Canvas.Pixels[x, y] := RandomLong; // Aufrufen was man braucht ..
Ich frage mich wie man das optisch interpretieren sollte.
Auf den ersten Blick würde ich Erwarten das es grau wird (als Mittelwert aller Farben),
das manche Bilder eher weiss, manche eher schwarz wirken finde ich schonmal seltsam.

Das man da keinerlei Muster erkennen sollte ist auch klar.

Vielleicht macht es Sinn aus den Pixeln die Helligkeitswerte o.ä. zu berechnen,
um dann den "Grauwert" zu bekommen, der sollte ja eigentlich wirklich in der Mitte liegen.
(Weder hell noch dunkel).

Oder sehe ich das falsch (Zugegeben, ich bin jetzt kein Statistikbild-Experte) ?
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#24

AW: Besseres Random() - eure Vorschläge

  Alt 28. Nov 2019, 11:30
Naja, es spielt ja auch der Faktor subjektive Wahrnehmung mit rein. Unser Hirn sucht automatisch nach Mustern und sieht auch welche wo keine sind.

Da ein Farbpixel aus wenigstens 3 Byte besteht, müsste demnach ein gutes Zufallsmuster nach dem hier verwendeten Mechanismus aus vielen bunten und unterschiedlich hellen Pixeln bestehen. Je einheitlicher die Helligkeitswerte (Grauwerte) würden, umso weniger zufällig wären die Zahlen.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#25

AW: Besseres Random() - eure Vorschläge

  Alt 28. Nov 2019, 11:47
Hier noch einmal alles in Originalgröße ...
Also ich könnte nicht behaupten, dass mein Monitor dafür geeignet ist, aber bei WELL sehe ich Wellen.

Das entspricht auch meiner Wahrnehmung, wenn ich bei Siedler immer verliere, die Würfel liefern kein Rauschen, sondern lassen mich gnadenlos im Wellental absaufen.
Gruß, Jo
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#26

AW: Besseres Random() - eure Vorschläge

  Alt 28. Nov 2019, 12:02
Well basiert bein der Initialisierung auf dem Standard-Random. Von daher ist alles was folgt "wellig".
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.901 Beiträge
 
Delphi 12 Athens
 
#27

AW: Besseres Random() - eure Vorschläge

  Alt 28. Nov 2019, 13:02
Naja, es spielt ja auch der Faktor subjektive Wahrnehmung mit rein. Unser Hirn sucht automatisch nach Mustern und sieht auch welche wo keine sind.

Da ein Farbpixel aus wenigstens 3 Byte besteht, müsste demnach ein gutes Zufallsmuster nach dem hier verwendeten Mechanismus aus vielen bunten und unterschiedlich hellen Pixeln bestehen. Je einheitlicher die Helligkeitswerte (Grauwerte) würden, umso weniger zufällig wären die Zahlen.
Ja, ich meinte ja auch zusätzlich die Helligkeitsverteilung, nicht statt der Farbe:
1. Farbe: gut zum Suchen nach Mustern
2. Grau : gut zum checken ob es gleichmäßiges Rauschen um eine mittlere Helligkeit ist

Zu 2. meine ich, wenn man dann über alle Pixel eine Statistik bildet müsste der Mittelwert bei exakt 127 liegen, und die Verteilung möglichst gleichmäßig.
Es wäre aber die Frage ob ein Random eines LongInt auch ein Random seiner einzelnen Bytes erzeugt (davon gehe ich mal gefühlsmäßig aus),
kenne die tiefere Methematik aber nicht.

Geändert von Rollo62 (28. Nov 2019 um 13:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#28

AW: Besseres Random() - eure Vorschläge

  Alt 28. Nov 2019, 13:33
Dolly: "Random-DEC und Random-MT19937 schneiden am besten ab."
Sherlock: "Es geht um die Gleichmäßigkeit des Rauschens. Je weniger Form darin zu erkennen ist, desto zufälliger soll der Algorithmus sein."

Also gerade bei den beiden sehe ich auffällige Muster. Zumindest hier auf dem Tablet.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.762 Beiträge
 
Delphi 11 Alexandria
 
#29

AW: Besseres Random() - eure Vorschläge

  Alt 28. Nov 2019, 14:16
Dolly: "Random-DEC und Random-MT19937 schneiden am besten ab."
Sherlock: "Es geht um die Gleichmäßigkeit des Rauschens. Je weniger Form darin zu erkennen ist, desto zufälliger soll der Algorithmus sein."

Also gerade bei den beiden sehe ich auffällige Muster. Zumindest hier auf dem Tablet.
Das ist nur meine Interpretation der ganze Geschichte hier...ich tendiere nur dazu, jeden Blödsinn, den ich von mir gebe mit reichlich Autorität zu unterlegen, darum glaubt man mir. Dennoch fände ich ein Balkendiagramm verständlicher. Gauss hat für seine Glockenkurve auch nicht Punkte auf einem Blatt Papier verteilt, sondern eben Häufigkeiten in ein geeignetes Koordinatensystem eingetragen. Und da kann man Häufungen auf den ersten Blick erkennen.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
719 Beiträge
 
Delphi 11 Alexandria
 
#30

AW: Besseres Random() - eure Vorschläge

  Alt 28. Nov 2019, 15:45
Irgendwelche erkennbare Muster in den Bildern deuten daraufhin, dass der Pseudo-Zufallsgenerator eher P als Z ist . Umgekehrt bedeuten Bilder ohne erkennbare Muster nicht unbedingt, dass der Generator gut ist.

Man muss die Bilder unkomprimiert betrachten. Aber auch unkomprimiert ergeben sich bei Dollys "Experiment" Muster beim Delpi Generator.

Auf HD Monitoren (oder schlechter und generell) sollte man beachten, dass die Bilder "in Originalgrösse" betrachtet werden. Werden die Bilder vom Anzeigeprogramm skaliert entstehen Muster, welche im Originalbild nicht vorhanden sind.

Für Tests mit dem Delphi Generator empfehle ich dir einen Initialwert randseed := ... zu setzen, dann werden - wenn andere experimentieren - die gleichen Zahlenfolgen erzeugt.

Wenn man den in asm geschriebenen Delphigenerator (Delphi 10.3.3) betrachtet, dann ist es nicht erstaunlich, dass die erzeugten Zahlen weit weg von "echtem Zufall" sind (hier asm Code in Delphi umgesetzt):

Delphi-Quellcode:
function ra( arange : integer ): integer;
(*
        PUSH    EAX
        IMUL    EAX,RandSeed,08088405H
        INC    EAX
        MOV    RandSeed,EAX
        POP    EDX
        MUL    EDX
        MOV    EAX,EDX
        *)

var eax, edx : cardinal;
    edxeax : Uint64;
begin
  eax := randseed * 134775813; // 3*17*131*20173
  inc( eax );
  randseed := eax;
  edxeax := arange*eax;
  edx := edxeax shr 32;
  Result := edx;
end;

Du erreichst u.U. eine bessere Verteilung, wenn du den Generator statt einmal eine grosse Zahl drei mal Zahlen in einem kleineren Intervall erzeugen lässt, zum Beispiel im Intervall [0,256[ (dabei spielt die Rechengenauigkeit des Generators eine wesentliche Rolle):

Delphi-Quellcode:
  hb := TBitMap.Create;
 try
  hb.SetSize( 1024,1024 );
  hb.PixelFormat := pf32bit;

  for x := 0 to hb.Width-1 do
    for y := 0 to hb.Height-1 do
      begin
        hb.Canvas.Pixels[x,y] := RGB(random(256),random(256),random(256)); // statt random( $1000000 );
      end;

  hb.SaveToFile( 'C:\Users\micha\Desktop\bm2.bmp' );
 finally
  hb.Free;
 end;

Wenn du die Qualität eines P Zufallgenerators testen willst, reichen diese Bilder natürlich nicht.
Michael Gasser

Geändert von Michael II (28. Nov 2019 um 15:54 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz