Bitmap unterschiedlich Linux und Windows

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Bitmap unterschiedlich Linux und Windows

Beitrag von sstvmaster »

LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Bitmap unterschiedlich Linux und Windows

Beitrag von af0815 »

Nein kannte ich noch nicht. Wieder was zum studieren.

Danke.

Wird leider auch wieder in C abgehandelt und nimmt auch auf das unterschiedliche Memorylayout keine wirkliche Rücksicht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Bitmap unterschiedlich Linux und Windows

Beitrag von Winni »

Hi!

Also was ich bisher über Algoritmen zu Bayer gefunden habe, ist eher trivial. Da wird debattiert, ob man vertikal oder horizontal interpoliert und ähnliche Scherze.

Da sind zumindest die Verfahren Mitchel, Spline und Lanczos3 und Lanczos4 deutlich überlegen, die alle in BGRAbitmap vorhanden sind.

Und bei den Kameras sehe ich das so:
Entweder man holt sich billigen Aldi-Schrott und wundert sich über nix.
Oder man holt sich ne Kamera, die für jede Farbe nen eigenen Sensor hat.

Und zum Abschluß noch die ketzerische Frage:
Wer braucht Fotos, die größer als der Monitor sind?
Zum Ansehen muss man die sowieso wieder runter skalieren.

Winni

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Bitmap unterschiedlich Linux und Windows

Beitrag von af0815 »

Winni hat geschrieben:
Fr 9. Apr 2021, 22:13
Und zum Abschluß noch die ketzerische Frage:
Wer braucht Fotos, die größer als der Monitor sind?
Zum Ansehen muss man die sowieso wieder runter skalieren.

Winni
Es geht hier um keine Aldi Kameras. Die würden ohne Probleme funktionieren :-) weil gerade die Aldi Kameras die populärsten Algorithmen verwenden. Keine Sorge die kenne ich schon und gerade die laufen ohne Probleme. Leider hören die in den Auflösungen sehr rasch auf.

Es geht hier in Richtung Industriekameras mit Auflösungen bis 20Mpix und sonstigen speziellen Eigenschaften. Aktuell GigE und USB3 Interface. Noch dazu kommt, das es manchmal nicht gestattet ist Windows zu verwenden und man auf Linux ausweichen MUSS obwohl der Hersteller hauptsächlich WIndows unterstützt.

Das beim Ansehen, muss man insofern relativieren, das dort nicht das ganze Bild von Belang ist, sondern das man in einen frei gewählten Ausschnitt hineinzoomen können muss. Dort sollte die Auflösung so hoch wie möglich sein um Details zu erkennen. Stell dir vor, man hat ein Foto von einem 8-10m2 großen Bereich und sollte auf einer Konservendose die Schrift lesen können. Nur damit man sagen kann, sie her wir haben die richtige Bezeichnung dort hinaufgedruckt. (und zwar im Kleingedruckten :-) )
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Bitmap unterschiedlich Linux und Windows

Beitrag von Winni »

@08/15

Hi!

Okay, das ist ein anderes paar Schuhe.

Da würde ich empfehlen als Filter Lanczos4. Der ist als Filter oft zu "hart" , aber liefert genau das, was Du brauchst: Reichlich Kontrast. Dafür neigt er dazu, bei den Farben zu "übertreiben", aber das ist ja anscheinend genau das Richtige für Dich, da es ja nicht um Blümchen-Wiesen geht.

Also ans Ende meines Codes:

Code: Alles auswählen

img.ResampleFilter:=rfLanczos4; 
BGRAreplace (img, img.resample(NewWidth, NewHeight));
Winni

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Bitmap unterschiedlich Linux und Windows

Beitrag von af0815 »

Das mit dem Beispiel nicht zu wörtlich nehmen. Es ist nur ein Gleichnis. Ich hätte genau so gut sagen können, das man auf einer Blumenwiese eine Biene mit Athritis finden muss beim Zoomen. :-)

Real, muss ich mich mal einarbeiten in das ganze. Nur bin ich gleich mal über die Untiefen des Cross entwickelns und den Unterschieden auf den Plattformen in den Tiefen der Widgetsets gestolpert. :mrgreen:
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Bitmap unterschiedlich Linux und Windows

Beitrag von Winni »

Hi!

Nochmal zu BGRAbitmap.
Das ist zu einer riesigen Bibliothek angewachsen, dass der Einstieg manchmal schwer fällt.

Ausschnitt geht so, wobei die Dimensionen des Ausschnitts (TRect) Deine software liefern muss.

Code: Alles auswählen

var tmp, img : TBGRAbitmap:
      R : Trect;
.....
tmp := TBGRAbitmap.create;
BGRAreplace (tmp,img.GetPart (R));
tmp.resampleFilter :=  rfLanczos4;
BGRAReplace (tmp, tmp.resample(NewWidth,NewHeight));
// Auf irgendeinen canvas zeichnen
tmp.Draw(Image1.Canvas,0,0);
tmp.free;
Hoffe Du kannst jetzt die Beschriftung auf der Biene lesen ....

Winni

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Bitmap unterschiedlich Linux und Windows

Beitrag von af0815 »

Langsam verstehe ich das ganze etwas mehr. Habe es für mich mal zum laufen gebracht, in der vollen Auflösung. Es ist wirklich so, das man einfach nur zwischen RGB und RGBA richtig umkopieren muss.
Eine Erkenntnis für mich ist, Windows arbeitet BGR und Linux BGRA. Das war der eigentlich Knackpunkt. BGRABitmap macht es da einfacher, es ist auf jeder Plattform BGRA. Das macht Applikationen die für beide Welten geschrieben sind einfacher. Auf mal gut zu wissen, warum solche Komponenten entstehen.

Die Sourcen bei GITHUB im Demobereich habe ich angepasst.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Bitmap unterschiedlich Linux und Windows

Beitrag von Winni »

Hi!

Jo - BGRAbitmap hat viele Vorteile.
Nebst den von Dir genannten vor allem eines: Geschwindigkeit.

Da Du ja auch Pixel-Ebene arbeiten musst, so sind
BGRAbitmap.setPixel und BGRAbitmap.getPixel um Meilen schneller als
Bitmap.pixels[ ]. Das ist vor allem bei größeren Datenmengen sehr nervenschonend.

Falls es Fragen gibt: Immer her damit. Ich arbeite seit einigen Jahren mit BGRAbitmap,
was nicht heisst dass ich alle Ecken kenne. Dafür ist es zu groß geworden.

Winni

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Bitmap unterschiedlich Linux und Windows

Beitrag von af0815 »

Danke, Fragen gibt es jede Menge. :D

Bevor ich was selbst schreibe, gibt es in BGRABitmap etwas für den Weissabgleich ? Die Bilder sind ja echte Rohdaten, wie du festgestellt hast.

Bei den Filtern finde ich nichts was von der Beschreibung her passen würde.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Bitmap unterschiedlich Linux und Windows

Beitrag von Winni »

Hi!

BGRAbitmap ist ein Schweizermesser, mit dem man viel veranstalten kann, das aber für Spezialeinsätze nicht gerüstet ist. Durch circulars Entwicklung von Lazpaint wird er jetzt aber auch mit den Wünschen der User konfrontiert. In dem Source von Lazpaint kann man gut sehen, wie die diversen BGRAbitmap-Funktionen eingesetzt werden können.

Weißabgleich : Eigentlich sollte die Kamera das doch machen ....

Aus der Hüfte geschossen: poor mans Weißabgleich:

Punkt anklicken, der eigentlich weiss sein sollte

Pix := myBGRAbitmap.getpixel(x,y);
holt dir in Pix die RGB-Werte und den Alpha-Wert

Für alle anderen Punkte jetzt die Werte von 255- Pix.[ r g b alpha ] addieren.
Dabei nicht über MaxByte addieren.

Ich weiß, dass der Weiß-Abgleich deutlich komplexer ist ...

Winni

PS.: Das mit ss oder ß lern ich auch noch mal. Aber nicht in diesem Leben ....

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Bitmap unterschiedlich Linux und Windows

Beitrag von af0815 »

Ich habe mir LazPaint zu dem Zwecke geladen, weil man dort die Filter 'in media res' ausprobieren kann.

Grundlegend bin ich mit Industriekameras konfrontiert. Bisher konnten die intern einiges umrechnen, nur zeigen sich leider die Grenzen. Bei der jetzigen Kamera, die auch fokussieren per Software können, ist es mit der restlichen Intelligenz nicht unbedingt gut bestellt. Der Hersteller verlagert alles am PC. Damit bleibt die nackte Kamera über. Somit muss ich mich leider (wieder) mit den Niederungen der Bildverarbeitung beschäftigen. Klar OpenCV wäre eine Möglichkeit, aber etwas oversized, da ich nur ein blödes Bild speichern muss. Mit Text, der im Bild eingebrannt werden muss und mit entsprechenden EXIF Daten. BGRABitmap hat nichts mit EXIF am Hut, das ist aber kein Problem. dEXIF macht dort die Arbeit.

Das mit dem Weissabgleich werde ich mir ein wenig genauer ansehen.

BTW: Das mit dem ss und ß kenne ich. Ich habe im Familiennamen ein 'scharfes s' und das sogar mittlerweile in Pass und Führerschein eingetragen :-)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Bitmap unterschiedlich Linux und Windows

Beitrag von af0815 »

Hier ist etwas zum Weissabgleich https://github.com/afriess/GSTCamera/tr ... iteBalance

Ich habe die Filter 'Normalize' von BGRABitmap dort auch einmal eingebaut, aber keine Wirkung festgestellt. Vielleicht habe ich das nur falsch angefasst.

Code: Alles auswählen

        case ComboBox2.ItemIndex of
          1: img.InplaceNormalize(false);
          2: img.InplaceNormalize(true);
        end;
Hier das ganze mit einem Filter aus C# EmguCv nach Pascal mit BGRABitmap transformiert. Links das Bild vor der Berechnung, rechts das Ergebnis.
Die linke Checkbos ist der Filter in unterschiedlichen Einstellungen. Rechts die Checkbox, beinhaltet den Filter von BGRABitmap.
Screenshot 2021-04-16 084553.jpg
Screenshot 2021-04-16 084553.jpg (126.65 KiB) 2687 mal betrachtet
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Bitmap unterschiedlich Linux und Windows

Beitrag von Winni »

Hallo!

Der BGRA-Filter Normalize hat nix mit Weissabgleich zu tun.

Er untersucht, ob der gesamte Farbraum ausgenutzt wird, also pro Kanal von 0..255

3 Beispiele, bei denen das nicht der Fall ist:

* Das Bild ist zu dunkel. Nur z.B. 0..127 genutzt.
* Das Bild ist zu hell. Nur z.B. 128..255 genutzt.
* Das Bild hat zu wenig Kontrast. Nur z.B. 64 .. 192 genutzt.

In all diesen Fällen spreizt BGRA.InplaceNormalize auf volle 0..255.

Beispiel mit random Farben für den Fall "zu dunkel" anbei.

Winni
Dateianhänge
BGRAnormalize.png
BGRAnormalize.png (63.02 KiB) 2667 mal betrachtet

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Bitmap unterschiedlich Linux und Windows

Beitrag von af0815 »

Danke für die Info, gehört eigentlich in die WIki :-) Generell sind die Filter etc. nicht wirklich beschrieben, oder habe ich da was nicht gefunden.

Also gibt es keinen Filter der einen Weissabgleich macht. Ok auch gut.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten