logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak przeprowadzić binaryzację obrazu w Delphi do pracy dyplomowej?

liamsd 04 Sie 2005 19:20 3927 9
REKLAMA
  • #1 1706685
    liamsd
    Poziom 10  
    Posty: 35
    Czy ktoś wie jak dokonać binaryzacji obrazu w środowisku Delphi.Prosze o jakąkolwiek pomoc w tej sprawie.Zależy mi na tym aby ruszyć z moją pracą dyplomową. Z góry dziękuję za odpowiedz. Mój e-mail: liamsd(_at_)o2.pl
  • REKLAMA
  • #2 1706960
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    Co jest źródłem obrazu?
  • REKLAMA
  • #3 1708759
    liamsd
    Poziom 10  
    Posty: 35
    Źródłem obrazu jest dowolny plik graficzny wczytany z dysku. Moim zadaniem jest napisanie aplikacji która po procesie binaryzacji wyswietli go za pomoca wiazki lasera.Ja zamierzam zrobic tak zeby byl to plik jpeg,ale nie wiem czy on sie nadaje. Myśle ze plik bmp bylby chyba latwioejszy.Ale naprawde nie mam pojęcia a co dopiero jak dokonac binaryzacji na nim.Wiec jesli masz o tym pojecie to blagam cie o pomoc. Z gory wielkie dzieki.
  • Pomocny post
    #4 1709109
    Sam Sung
    Poziom 33  
    Posty: 2018
    Pomógł: 227
    Ocena: 597
    Delphi bez problemu wczyta JPEG, bez wysiłku będziesz miał dostęp do pikseli tak samo jak w BMP.
    Skoro piszesz pracę, to może rzuć chociaż jakimś akapitem np. o rozwoju technik binaryzacji obrazu :) albo o algorytmie / algorytmach który masz zamiar stosować...
  • #5 1709143
    liamsd
    Poziom 10  
    Posty: 35
    Ale czy ty mógłbyś mi pomóc w napisaniu kodu który bedzię to realizował lub naprowadzić mnie na jakieś materiały,bo ja jestem z tego zielony. To po pierwsze,a po drugie to jeśli to już bedę miał zrealizowane, to potem zostaje mi dokonanie wyboru algorytmu,który tak obrobi ten obraz,aby on w płynny sposób mogł być wyświetlony,bo laser nie jest zbytnio szybki,a moim zadaniem jest taka obróbka grafiki która pozwoli na płynne wyświetlenie.
  • REKLAMA
  • REKLAMA
  • #7 1709498
    liamsd
    Poziom 10  
    Posty: 35
    Ludzie kochani!!!! Pomożcie mi w napisaniu kodu źródłowego,a nie pytajcie o inne rzeczy. Laser już mam - jest on praca magisterską. Ja mam napisać program, który z dowolnego pliku graficznego zrobi mape zero-jedynkową, czyli podda go procesowi binaryzacji, z odpowiednim progiem. Gdyż jak już wczesniej napisałem laser może wyświelić tylko 100pkt na sekunde (czyli nie dużo) a następnie wyświetli go na ścianie bądź suficie za pomoca wiązki lasera. Mi chodzi o sam proces binaryzacji.Potem mogę ruszyć dalej. Jak narazie musze zrobić to. Jeśli będę miał już ten plik to za pomocą odpowiednich funkcji wyślę współrzędne punktów które laser wyświetli. Pozdrawiam i czekam!!!
  • #8 1710416
    Piroman1024
    Poziom 17  
    Posty: 171
    Pomógł: 18
    Ocena: 17
    Rzeby Ci pomóc wpierw trzeba się dowiedzieć o co Ci dokładnie chodzi - słowo binaryzacja niewiele mówi.
    A kawałek kodu masz tu:

    var InvertRys:Array[0..3*1024*768]of Byte; - zmienna globalna


    procedure LoadBMP(FileName:String;var W,H:Word;var Bits:Pointer);
    var Header:array[1..54]of byte;
    Zp:file;
    Result,i:integer;
    BiBitCount,Temp:byte;
    BiSizeImage,bitsize:dword;
    BS:Extended;
    begin
    assignfile(zp,FileName);
    reset(Zp,1);
    blockread(Zp,Header,54,Result);
    w:=Header[19]+Header[20]*256+Header[21]*65536; {szerokość obrazka}
    h:=Header[23]+Header[24]*256+Header[25]*65536; {wysokość obrazka}
    BiBitCount:=Header[29];
    BiSizeImage:=Header[35]+Header[36]*256+Header[37]*65536;
    BitSize:=BiSizeImage;
    if BitSize=0 then begin Bs:=(W*BiBitCount+7)/8*abs(H);BitSize:=Trunc(Bs); end;
    BlockRead(Zp,InvertRys,BitSize,Result);
    CloseFile(Zp);
    {W zmiennej InvertRys jest rysunke bajt po bajcie}
    {Pierwszy bajt zawiera składową czerwoną,drugi zieloną ,trzeci niebieską,itd}

    Bits:=@InvertRys
    end;

    Więcej chyba nie trzeba dodawać.
  • #9 1711396
    Zbych_
    Poziom 25  
    Posty: 456
    Pomógł: 81
    Ocena: 6
    liamsd napisał:
    Ja mam napisać program, który z dowolnego pliku graficznego zrobi mape zero-jedynkową, czyli podda go procesowi binaryzacji, z odpowiednim progiem.


    Po polsku to co chcesz zrobić nazywane jest operacją progowania i jest banalnie proste. Jeśli dany punkt ma jasność większą niż ustalony próg to jest zapamiętywany jako jasny (np. bit =1, RGB=255,255,255 itp), w przeciwnym wypadku jako ciemny (np bit równ 0, RGB=0,0,0). Ważne jest sposób wyboru progu. Możesz to zrobić ręcznie, albo automatycznie. Sposobów na automatyczny dobór progu jest pewnie wiele. Najprościej byłoby wybrać średnią na podstawie histogramu zdjęcia. Nalejpiej byłoby gdybyś się przeszedł do biblioteki i poszukał książek na temat przetwarzania obrazów.
  • #10 1713167
    Sanjuro
    Poziom 18  
    Posty: 300
    Pomógł: 6
    Ocena: 7
    liamsd napisał:
    Ludzie kochani!!!! Pomożcie mi w napisaniu kodu źródłowego,a nie pytajcie o inne rzeczy. Laser już mam - jest on praca magisterską. Ja mam napisać program, który z dowolnego pliku graficznego zrobi mape zero-jedynkową, czyli podda go procesowi binaryzacji, z odpowiednim progiem. Gdyż jak już wczesniej napisałem laser może wyświelić tylko 100pkt na sekunde (czyli nie dużo) a następnie wyświetli go na ścianie bądź suficie za pomoca wiązki lasera. Mi chodzi o sam proces binaryzacji.Potem mogę ruszyć dalej. Jak narazie musze zrobić to. Jeśli będę miał już ten plik to za pomocą odpowiednich funkcji wyślę współrzędne punktów które laser wyświetli. Pozdrawiam i czekam!!!


    Ale wlasnie wazne sa szczegoly sprzetowe. Z szybkoscia 100pkt/s to raczej niewiele wyswietlisz zachowujac "plynnosc" obrazu, no chyba ze ikonki :? Te 100pkt/s to w jaki sposob wyswietla? Jezeli poprzez wygaszanie lasera pomiedzy punktami i punkt kolo punktu? Jesli tak to tu niewiele ci pomoze sama binaryzacja obrazu. Poszukalbym na twoim miejscu informacji na temat filtrow wykrywajacych krawedzie. Dopiero po zaaplikowaniu takiego filtru mozna myslec o binaryzacji.
    A jesli laser nie jest wygaszany pomiedzy punktami to najlepszym sposobem byloby podawanie rysunku wektorowego, odpowiednio zoptymalizowanego pod wydajnosc projektora laserowego.

Podsumowanie tematu

✨ Dyskusja dotyczy implementacji binaryzacji obrazu w środowisku Delphi na potrzeby pracy dyplomowej związanej z wyświetlaniem obrazu za pomocą wiązki lasera. Źródłem obrazu mają być pliki graficzne, głównie JPEG lub BMP, które Delphi potrafi wczytać i umożliwia dostęp do pikseli. Binaryzacja (progowanie) polega na konwersji obrazu do mapy zero-jedynkowej na podstawie ustalonego progu jasności, gdzie piksele jaśniejsze od progu są zapisywane jako białe (1), a ciemniejsze jako czarne (0). Wskazano, że wybór progu może być ręczny lub automatyczny, np. na podstawie histogramu obrazu. Podkreślono, że ze względu na ograniczoną szybkość wyświetlania lasera (około 100 punktów na sekundę), konieczne jest optymalne przetwarzanie obrazu, np. poprzez filtrowanie krawędzi lub zastosowanie algorytmów redukujących liczbę punktów do wyświetlenia. Przykładowy fragment kodu do wczytywania pliku BMP w Delphi został udostępniony jako punkt wyjścia do dalszej implementacji. Dyskusja zwraca uwagę na aspekt sprzętowy i konieczność dostosowania algorytmu do możliwości lasera oraz na potrzebę dalszych badań literaturowych dotyczących technik binaryzacji i przetwarzania obrazów.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA