Pada pertemuan pertama dalam kuliah grafika komputer ada satu hal penting yang ditanyakan (dijadikan tugas 🙂 ) yaitu bagaimana caranya menampilkan titik dengan warna tertentu di layar monitor (dengan mengakses framebuffer) dan mendapatkan deskripsi tentang warna dari titik dengan koordinat tertentu di layar. Dalam dunia DOS dulu, hal ini mudah saja (dalam berbagai asumsi) untuk dilakukan yaitu dengan mengakses memori pada alamat $A0000 dengan data yang dapat diakses tergantung dari mode grafik yang sedang aktif.
Lalu bagaimana melakukan hal ini di delphi (misal menampilkan titik berwarna tertentu pada form)? hal ini bisa dilakukan melalui Property Pixels milik objek bertipe TCanvas yang umumnya merupakan milik dari kelas turunan TWinControl seperti TForm. contoh penggunaan Pixels adalah sebagai berikut :
{ menampilkan titik berwarna merah di koordinat (10, 10) } Form1.Canvas.Pixels[10,10] := clRed; { atau } Form1.Canvas.Pixels[10, 10] := RGB(255, 0, 0); { mendapatkan pixel dari koordinat tertentu (10, 10) } var p : TColor; r, g, b : byte; { ... } p := Form1.Canvas.Pixels[10, 10] { mendapatkan komponen warna merah, hijau, dan biru } r := GetRValue(p); g := GetGValue(p); b := GetBValue(p);
Cara di atas merupakan cara termudah untuk mengakses pixel pada suatu koordinat di layar (maksudnya form, hehehe) namun bukan merupakan cara tercepat. Masih ada cara lain yang lebih cepat. saya pertama kali merasakan lambatnya Pixels ketika mengikuti kuliah Grafika Komputer (3 tahun yang lalu) dan membuat tugas menggunakan Delphi (tadinya pakai turbo pascal 7) tapi akhirnya mengikuti anggota kelompok lain yang lebih akrab dengan Delphi daripada turbo pascal.
Cara lainnya untuk mengakses pixel adalah dengan menggunakan properti scanline dari kelas TBitmap. Kenapa menggunakan TBitmap? awalnya sih karena untuk menampilkan gambar di Delphi saya menggunakan komponen TImage dan di dalam TImage ada properti Picture yang kemudian properti Bitmap yang merupakan kelas bertipe TBitmap (garing hehehe..) yang akhirnya sampai sekarang saya gunakan untuk keperluan pengolahan citra ataupun menggambar (grafika). Untuk menggunakan scanline dengan nyaman ada beberapa hal yang perlu untuk dideklarasi terlebih dahulu.
type { asumsi PixelFormat yang digunakan adalah 24 bit (pf24bit) } TWarnaRGB = packed record b, g, r : Byte; end; { packed; jadi 1 record ukurannya persis 3 byte, klo nggak pake packed nanti ukurannya di-align ke 4 byte jadinya 4x3 = 12 byte; } TArrRGB = array[0..65535] of TWarnaRGB; PArrRGB = ^TArrRGB; { tipe properti scanline adalah Pointer }
Tipe data bentukan di atas akan digunakan dalam potongan kode berikut:
procedure PutPixel(b:TBitmap; x, y:integer; rr, gg, bb : byte); var p : PArrRGB; begin p := b.Scanline[y];{ 10 adalah baris/ordinat(y) pada Bitmap } with p[x] do begin r := rr; g := gg; b := bb; end; end; procedure GetPixel(b:TBitmap; x, y:integer; var r, g, b : Byte); var p : PArrRGB; begin p := b.Scanline[y]; r := p[x].r; g := p[x].g; b := p[x].b; end;
Kode di atas mengasumsikan properti PixelFormat milik TBitmap bernilai pf24bit yang artinya Bitmap menyimpan informasi gambar sebanyak 3 byte per titik (r, g, dan b). Jika bitmap yang dimiliki tidak dalam format 24 bit maka ubah saja ke dalam format 24 bit dengan kode berikut (sedikit maksa).
var b : TBitmap; { .. } b.PixelFormat := pf24bit;
Halow Peb! pa kabar?
sip sip! sering2 bagi cerita ke-gaibannya ;D
ku link blognya yaa.. 😀
mas…say amo tanya. klo pengen mendapatkan matriknya rgb dari gambar bagaimana caranya?truz ditampilkan di stringgrid.coz aq masih bingung. trimakasih ya mas.
@tris: gambarnya di iterate aja
var
i,j:integer;
p : PArrRGB;
b:TBitmap; { gambarnya }
sg : TStringgrid; { gridnya }
{ .. }
for j := 0 to b.Height-1 do begin { iterate row }
p := b.Scanline[j];
for i := 0 to b.Width-1 do begin { iterate column }
sg.Cells[i, j] := IntToStr(p[i].r)+','+IntToStr(p[i].g)+','+IntToStr(p[i].b);
end;
end;
klo untuk mengakses gambar dari web camera gimana ya caranya?
untuk mengakses gambar dari Web Cam, saya pakai komponen DSPack dari progdigy.com di situ ada komponen TFrameGrabber
ada method untuk GetBitmap (cara halus)
cara kasarnya(tanpa pakai FrameGrabber tapi nyuri dari canvas TVideoWindow):
BitBlt(VideoWindow1.Canvas.Handle, 0, 0, VideoWindow1.Width, VideoWindow1.Height, MyBitmap.Canvas.Handle, 0, 0, pmSrcCopy);//klo ga salah lo ya.. coba cek di help Win32 SDK
mas, aku nyoba pakek looping sampai Height-1 dan Width-1. tp kok nge-run nya lama?
gmn cara agar dapet RGB tp gak selama itu?
trimakasih banyak atas bantuannya ya mas
tris:lamanya mungkin karena dimasukkan ke dbgrid mas, perlu konversi dari bilangan bulat ke string karakter, trus update data di stringgrid. memang harus ke string grid ya mas? hehe.. kalo memang harus, mendingan sementara ditampung dulu ke stringlist of stringlist
var i,j:integer;
p : PArrRGB;
b:TBitmap;//gambarnya
s1, s2 : TStrings;
sg : TStringgrid;//gridnya
s1 := TStringlist.Create;
s2 := TStringlist.Create;
for j := 0 to b.Height-1 do begin //iterate row
p := b.Scanline[j];
s2.Clear;
for i := 0 to b.Width-1 do begin //iterate column
s2.Add(IntToStr(p[i].r)+','+IntToStr(p[i].g)+','+IntToStr(p[i].b));//simpan di stringlist
end;
s1.Add(s2.CommaText);
end;
//sekarang dikopi ke string grid
sg.RowCount := s1.Count+sg.FixedRows;
for j := 0 to s1.Count-1 do //iterate row
sg.Rows[sg.FixedRows+j].CommaText := s1[j];
semoga berhasil! 😉
Peb, mo nanya nih! gw pernah baca di buku teknik pengolahan citra digital menggunakan delphi, tentang binarisasi karya Balza Achmad. begini bunyinya:
var
i,j,Ambang,gray:integer;
PC,PH:Pbytearray;
begin
Ambang:=128;
if(form4.Image.Picture.Bitmap.PixelFormat=pf24bit) then
for i:=0 to form4.Image.Picture.Height-1 do
begin
PC:=form4.Image.Picture.Bitmap.ScanLine[i];
PH:=form4.Image.Picture.Bitmap.ScanLine[i];
for j:=0 to form3.Image.Picture.Bitmap.Width-1 do
begin
gray:=round((PC[3*j]+PC[3*j+1]+PC[3*j+2])/3);
if (gray
if (gray
Jelasin gw dunk maksudnya?? Gw ga ngerti jalan pikirannya terutama di bagian scanline ama di bagian PC/PH, yang ada tulisan [3*j] ato[3*j+1] ??? gunanya apa ya?
Trus maksud n guna pbytearray ama Array of array of byte tu apa ya???
MOhon bantuannya. Tenkyu Bro!!!
umm, gw coba dikit2 y… rada bingung jg nih..
bedanya pbytearray dengan PArrRGB gw itu :
klo pbytearray itu menunjuk record yang ukurannya 1 byte. sedangkan pArrRGB gw itu menunjuk record yang ukurannya 3 byte. sebenarnya sama, hanya saja.. gw nggak harus mengalikan dengan 3 dan menambah 1 dan 2 untuk mengakses nilai green, dan red. soalnya udah dibungkus sama record TWarnaRGB.
dengan asumsi urutan penyimpanan elemen pixel di windows adalah bgr bukan rgb maksud pernyataan di atas spt ini:
PC[3*j] itu untuk mengakses elemen blue yang ke-j
PC[3*j+1] untuk mengakses elemen green yang ke-j
PC[3*j+2] untuk mengakses elemen red yang ke-j
dikalikan 3 karena tiap pixel membutuhkan tempat penyimpanan sebesar 3 x 1 byte per elemen (b 1 byte, g 1 byte, r 1 byte). jadi ketika mengalikan j (iterator kolom) dengan 3, nilai yang ditunjuk oleh PByteArray adalah nilai blue, nilai green dan red adalah 1-2 byte setelah posisi blue tsb.
pointer yang gw gunakan adalah pointer of array of record (bgr) bukan pointer of array of byte. jadi, dari struktur record itu udah ada offset dari pointer untuk merujuk ke elemen yang gw maksud (r, g, b) dan pengaksesan nilai masing-masing elemen sudah dibuat oleh compiler jadi tidak perlu lagi susah-susah melakukan operasi aritmatika terhadap alamat pointer (pointer arithmetic)
alow kk pebbie…
aku mao nanya…gimana caranya dapetin nilai koordinat dari pixel? misalnya ada gambar kotak yang warnanya hitam smua…trus gimana caranya ngedapetin koordinat dari keempat sudut kotak tersebut???
Makasih banyak yah….
kalau untuk mencari sudut dari kotak bisa didapat dari kombinasi nilai elemen bounding box-nya.
tapi untuk mendapatkan kotaknya bisa digunakan segmentasi dengan CCL (Connected Component Labelling), yaitu memberi label kepada komponen (pixel) yang berhubungan. keterhubungan antar pixel bisa merupakan terhubung ke 4 atau 8 tetangga. untuk melakukan CCL bisa secara iteratif atau memodifikasi dari algoritma fill (mis. floodfil).
cara yang lebih ringan untuk kasus mencari sudut adalah menelusuri pantai/tembok. jadi seolah-olah ada robot yang memproses pixel. robot tersebut mulai dari salah satu tepian region (mis. kotak) lalu bergerak menelusuri tepian tersebut. 😉
untuk menentukan region yang diproses kotak atau bukan bisa menggunakan properti width to height ratio (kotak normal) atau axis-aligned bounding box (kotak yang terputar).
saya ud pake cara tersebut…saya gunakan 3 buah scanline (atas,tengah,bawah)…..
akan tetapi…masalahnya…ko fungsi scanlinenya error yah??? apa memang nga bisa digunakan secara bareng kk?? saya bingung niy…
ato kk pebbie ada usul yang lebih baik?
potongan programnya kira2 begini:
(PA–>BarisAtas;PT–>BarisTengah;PB–>BarisBawah)
…
for i:=0 to image1.picture.height-1 do
begin
PA:=image1.picture.bitmap.scanline[i];
PB:=image1.picture.bitmap.scanline[i+1];
PC:=image1.picture.bitmap.scanline[i+2];
…
Tapi kok error yah…delphi said that scanline was out of index ???
Trims
saya ud pake cara tersebut…saya gunakan 3 buah scanline (atas,tengah,bawah)…..
akan tetapi…masalahnya…ko fungsi scanlinenya error yah??? apa memang nga bisa digunakan secara bareng kk?? saya bingung niy…
ato kk pebbie ada usul yang lebih baik?
potongan programnya kira2 begini:
(PA–>BarisAtas;PT–>BarisTengah;PB–>BarisBawah)
…
for i:=0 to image1.picture.height-1 do
begin
PA:=image1.picture.bitmap.scanline[i];
PT:=image1.picture.bitmap.scanline[i+1];
PB:=image1.picture.bitmap.scanline[i+2];
…
Tapi kok error yah…delphi said that scanline was out of index ???
Trims
hoho.. ya jelas saja akan error..
ketika nilai i mencapai Image1.Picture.Height-1 maka scanline[i+1] dan scanline[i+2] akan menunjuk ke baris scanline yang tidak terdefinisi. karena nilai maksimum untuk mengakses scanline hanya sampai Image1.Picture.Height-1. perlu ditambahkan analisa kasus untuk memeriksa apakah pengaksesan scanline valid atau tidak. 😉
misal bisa saja nilai maksimum untuk iterasi for hanya sampai Image1.Picture.Height-3 atau ditambahkan IF di dalam iterasi FOR
mas, saya mau tanya, kalo mau fliping horisontal & vertikal gambar (putar), sitaknya bagaimana yach…
tirima kasih nich sebelumnya
untuk melakukan image flipping hanya diperlukan pertukaran pixel. misal untuk flip horizontal maka pixel pada koordinat [i, j] ditukar dengan pixel pada koordinat [i, image.height-j] untuk i bernilai dari 0 sampai image.width-1 dan j dari 0 sampai image.height div 2. untuk vertical flip yang ditukar adalah pixel yang berada di atas dengan di bawah garis tengah horizontal.
//vertical flip
var
i, j : integer;
b : TBitmap;
p, p2 : PArrRGB;
w : TWarnaRGB;
begin
for j := 0 to (b.Height div 2)-1 do begin
p := b.scanline[j];
p2 := b.scanline[b.Height-1-j];
for i := 0 to b.Width-1 do begin
//tukar
w := p[i];
p[i] := p2[i];
p2[i] := w;
end;
end;
end;
untuk horizontal flip yang ditukar adalah pixel kiri dengan kanan garis tengah vertikal.
//horizontal flip
var
i, j : integer;
b : TBitmap;
p : PArrRGB;
w : TWarnaRGB;
begin
for j := 0 to b.Height-1 do begin
p := b.scanline[j];
for i := 0 to (b.Width div 2)-1 do begin
//tukar
w := p[i];
p[i] := p[b.Width-1-i];
p2[b.Width-1-i] := w;
end;
end;
end;
untuk melakukan putaran lebih enak menggunakan dua buah image. pemetaan pixel dapat dilakukan secara maju (forward mapping) atau terbalik (backward mapping). pemetaan maju memetakan posisi tiap pixel di citra sumber ke posisi baru di citra tujuan dengan nilai pixel di posisi baru adalah nilai pixel di citra asal. fungsi yang digunakan adalah fungsi transformasi geometrik rotasi biasa. sedangkan untuk pemetaan mundur tiap posisi pixel di citra tujuan dipetakan menggunakan fungsi invers rotasi sehingga menghasilkan posisi titik yang bersesuaian pada citra asal. nilai pixel yang digunakan tetap dari citra asal.
Mas saya lagi coba mbuat program deteksi warna RGB pake TImage
Kenapa ya, warna yang terdeteksi Cuma bagian kiri dari image.???
Misalnya image yang diambil bentuknya kotak berwarna merah bagian kiri 25% dan 75% berwarna biru disebelah kanannya.
Walaupun image yang dimbil 75% berwarna biru tapi nilai R selalu lebih tinggi, kenapa ya……???
Listing programnya gini
var
x,y: integer;
R, G, B, jmlpixel : longint;
begin
R := 0;
G := 0;
B := 0;
jmlpixel := 0;
for x := 0 to image1.Height-1 do
for y := 0 to image1.Width-1 do
begin
R := R + GetRValue(Image1.Picture.Bitmap.Canvas.Pixels[x,y]);
G := G + GetGValue(Image1.Picture.Bitmap.Canvas.Pixels[x,y]);
B := B + GetBValue(Image1.Picture.Bitmap.Canvas.Pixels[x,y]);
jmlpixel := jmlpixel + 1;
end;
R := round(R/jmlpixel);
G := round(G/jmlpixel);
B := round(B/jmlpixel);
Edit1.Text := intToStr(R);
Edit2.Text := intToStr(G);
Edit3.Text := intToStr(B);
End;
Da saran ga…..
Maksih ya……….
kebalik tuh
for x := 0 to image1.Height-1 do
for y := 0 to image1.Width-1 do
semestinya
for y := 0 to image1.Height-1 do
for x := 0 to image1.Width-1 do
oh… ya… sorry saya yang salah ketik.
saya dah bikin kaya itu tapi tetep aja.
kalo ingin mengetahui besarnya komponen RGB dari image yang di ambil dari WEBCam gimana?
saya pake TVideoGrabber.
tolong ya…..Ga bisa-bisa nih.maklum masih awam…
thanks…..
Mohon bantuannya mas. Saya mau tanya nehh. Bagaimana caranya ya, menghitung tingkat/kuantitas pixel di dalam satu area gambar hitam putih/biner (koordinat kita tentukan) dengan metode yang cukup cepat, sehingga kita dapat mengetahui dari hasil hitung tersebut daerah tersebut dihitamkan atau diberi isian. Terus terang ini yang saya tanyakan ini sangat erat hubungannya dengan pembuatan aplikasi optical mark recognition (OMR) yang sepertinya tidak disebarkan ke publik atau mungkin hanya sedikit orang yang mengetahuinya. Sebelumnya, terima kasih jika anda dapat membantu.
itu disebut CCL (Connected Component Labeling)
cara yang paling sederhana (menurut saya) pakai algoritma flood-fill (seperti pada Paint).
Peb, mau nanya nih, kali ini tentang konsep dasar:
1. Apa sih bedanya BMP dan JPEG ? dari buku2 sih bilangnya kalo BMP adalah format yang belum dimampatkan. Lalu kenapa image processing lebih sering menggunakan format BMP, apakah JPEG tidak bisa diolah secara langsung seperti halnya BMP? Truz JPEG itu masih ada informasi RGBnya ga sih?
2. Saya agak bingung mengenai format BMP 8 bit. Buku2 bilang kalo 8 bit itu artinya grayscale.
Apakah di 8 bit itu masih terdapat informasi RGB? Tapi kenapa saya masih menemukan citra berformat 8bit yang berwarna-warni dengan kualitas gambar seperti 24bit?
Thank’s!
saya coba jawab yah..
1. BMP dan JPEG hanya berbeda format penyimpanan aja. BMP juga ada yang dimampatkan, biasanya sih pakai Run-Length Encoding walaupun pada umumnya BMP adalah format tidak termampat yang artinya informasi pixel di simpan mentah-mentah. kalau JPEG itu format yang disusun sebagai standar, sesuai kepanjangan JPEG (Joint Photographic Expert Group). dikompresi dengan huffman coding, tapi sebelumnya ditransformasi ke domain spasial dengan transformasi kosinus diskret (DCT)(agak mirip dengan MP3 untuk suara). FYI, JPEG2000 menggunakan DWT (Discrete Wavelet Transform) untuk mengurangi kelemahan diskretisasi DCT.
2. untuk bitmap dengan format pixel 8 bit. tiap pixelnya adalah index ke tabel lookup(palet warna) yang berisi informasi RGB. jadi jumlah warna yang mungkin untuk bitmap 8 bit adalah 256 warna. kualitasnya kemungkinan besar tidak sama seperti 24 bit karena ada kuantisasi dari 2 milyar warna ke 256 warna.
semoga menjawab..
Tenkyu peb!
Mo nanya lagi ni (sory nanya mulu, maklum ‘no skill’ hehe..)
Gmn yah cara ngubah warna citra (kita batasin format .bmp 24 bit aj) dari grayscale (hitam..abu..putih) menjadi spektrum color/pelangi (me..ji..ku..hi..bi..ni..u).
Maksudnya gini, misal: yang tadinya warna kehitam2an jadi sekitar warna merah, trus yang warna keabu2an mgkn jd sekitar warna kuning/hijau, yg warna keputihan menjadi sekitar warna ungu .
Dengan kata lain, gw pengen ngubah pallete color gambarnya.
Thanks sebelumnya!
hmm.. mungkin bisa dicoba dari model warna HSV/HSI (Hue-Saturation-Value) komponen Hue itu klo tidak salah pola warna pelangi.
jadi pertama bikin gradasi mejikuhibinu dari model HSV yang dikonversi ke RGB (H bervariasi 0-255, S=255, V=127, CMIIW). lalu disampling dari gradasi mejikuhibinu tsb diasosiasikan dengan tingkat 0-255 dari greyscale.
type
warnargb=packed record
b, g, r : byte;
end;
var
paletrgb:array [0..255] of warnargb;
h,s,v:byte;
begin
s := 255;
v := 127;
for h := 0 to 255 do begin
//konversi hsv ke rgb
paletrgb[h] := hsv_to_rgb(h, s, v);//saya lupa definisinya
end;
end;
//apply paletrgb ke palet bitmap greyscale ;)
mau nanya ni mas..
mas udah pernah nyoba pake sqlite?
kira-kira cocok ga sqlite digunakan untuk nyimpen data citra? kelebihan & kekurangannya apa ya?
oiya, satu lagi, gimana caranya nyari warna dominan dari suatu citra. misalnya ada suatu citra laut, warna dominannya kan biru tuh, tp gimana cara ngitungnya??
mohon petunjuk…
makasih banget
hmm.. kalo nyoba untuk aplikasi sendiri sih belum pernah, tapi kalo nyoba aplikasi contoh dari xampp pake php pernah.. sepertinya sama saja dengan mysql 😀
kalau untuk penyimpanan cocok atau tidak saya pikir kembali ke tujuannya ya.. tergantung sqlite itu akan digunakan untuk apa dan citra yang disimpan ke basis data akan digunakan untuk apa..
yang pasti kalau ingin menyimpan citra dalam field di basis data biasanya disimpan sebagai BLOB. kalau untuk ukuran penyimpanan kembali lagi pada format pemampatan citra yang digunakan sebelum disimpan sebagai BLOB. kalau tidak dimampatkan saya pikir percuma saja kecuali kalau memang dibutuhkan pencarian terhadap koleksi basis data citra yang amat banyak (misal untuk aplikasi GIS yang menyimpan data raster/citra yang diindeks secara spasial seperti pada google earth.. ups, nyebut merk hehehe.. :D).
kalau untuk mencari warna dominan dari suatu citra bisa saja menggunakan rata-rata dari seluruh pixel. mungkin jika diperlukan rata-rata yang diambil dalam model ruang warna tertentu (mis RGB, CMY, HSV, YIQ, YUV, dll). jadi setelah dikonversi ke ruang warna yang diinginkan, dihitung rata-rata dari tiap komponen pixel (misal rata-rata merah, hijau, dan biru untuk model ruang warna RGB)..
waduh2… kok aku rada bingung ya?? ;(
kalo dalam delphi, syntaxnya untuk pencarian warna dominan gimana mas?
makasih…
Peb… mao nanya lagi niy…gimana si cara menentukan letak suatu pixel perspketif dari suatu gambar???
Maksudnya gini…..
Misalnya dalam suatu gambar ada 3 benda….benda 1 letaknya paling depan, benda 2 dibelakang benda 1, dan benda 3 letaknya dibelakang benda 2….
Trus gimana mengakses pixel agar ketahuan letak ketiga benda tersebut klo benda 3 letaknya dibalakang benda 2, benda 2 letaknya diblakang benda 1, dan benda 1 letaknya paling depan….
Makasih banyak lho….
@mia:coba lihat posting saya tentang jurus rata-rata untuk penghalusan citra. ada yang bertanya pada bagian komentar untuk menghitung intensitas rata-rata. algoritmanya kira-kira begini:
- konversi citra dari model RGB ke HSV
- hitung intensitas rata-rata dari komponen H (Hue)
- untuk mendapatkan warna RGB dari hasil nilai rata-rata tsb dikonversi lagi ke RGB dengan nilai S dan V yang sudah ditentukan (konstan)
atau bisa berdasarkan himpunan warna yang menjadi kandidat warna dominan. dihitung rata-rata ‘jarak’ antara vektor warna tiap pixel dengan vektor warna kandidat. lalu kandidat dipilih berdasarkan perhitungan jarak minimum.
@$^$: umm.. klo tanpa punya informasi priori tentang gambar yang diambil (blind) susah juga menentukan letak pixel secara perspektif.. cara computer vision baru bisa menentukan objek secara general (bukan titik) dari analisis scene
Waduh…jadi analisa secara global yah…bukan titik per titik dari pixel???
Mungkin kk pebbie ada usul ato cara sederhananya gitu…buat tau yang mana letak benda di belakang ma yg di depan???
Thx
Oh ya… klo akses webcam pake DSP Pack bisa akses pixel secara langsung nga???
Maksudnya gini… setelah preview dari webcam muncul kita langsung dapat akses pixel secara langsung tanpa save dulu ke image(bmp, jpeg, dll)…. misalnya kita mao grayscaling gambar preview webcam secara langsung…. gimana yah???
Thx
Hay Pebbie, ikutan tanya yach..
Aku lagi coba tentang konversi warna, tentang colormap untuk citra hasil infrared termography. Contoh kasusnya untuk penskalaan temperatur, topografi peta, x-ray melalui warna. Aku bingung banget ni buat listing programnya, apalagi ada kalibrasinya juga tuh kayaknya. Bisa bantu aku nggak???
Kalau enggak keberatan pebbie bisa liat contoh kasusnya di
http://www.google.co.id –> search gambar:infrared image.
Tolong ya Peb…
Peb, Mo Nanya:
1. dpi(dot per inch) itu apa sih?
2. kalo hubungan antara panjang citra (mis:dalam centimeter)dengan pixel itu gimana ya? maksudnya begini, misal:suatu citra di print ternyata memiliki ukuran panjang 5 cm, berapakah besarnya dalam pixel, bagaimana relasinya ???
Tenkyu Peb!
Ass
mo nanya mas,….
saya lg nyusun tugas akhir nich n sgt btuh bantuan dari mas feb….
judulx penentuan morfologi sel darah merah berbasis pengolahan citra dan jaringan syafaf tiruan, sofware yg saya pake borland delphi
nach… yg saya mo tanyakan gimsns menerapkan algoritma jaringan syaraf tiruan dengan delphi, gimana menentukan jumlah pixel dari citra digital dgn delphi, thx bgt b4 , mas feb.
saya lg enyelesaikan TA ttg animasi gerak peluru dgn 2 dimensi dengan menggunakan delphi dan saya kesulitan utk penskalaan hasil grafik animasi ( saya diminta utk memperkecil hasil grafik jika melewati area gambar dan memperbesar hasil grafik jika hasil tampak kecil di area gambar). Saya sudah pernah mencoba tetapi haol untuk sudut malah salah (Sudut 60 derajat sama besar dengan sudut2 lainnya) jadi saya mohon bantuannya..trimakasih
sebelumnya saya mohon maaf karena belum bisa menjawab pertanyaan teman-teman.. saya akhir-akhir ini sedang sibuk menyelesaikan tugas akhir (sidang) dan ada beberapa proyek yang harus diselesaikan. saya coba jawab sedikit dulu ya.
@ lyly : algoritma jaringan syarafnya ingin diaplikasikan seperti apa ya? saya masih kurang mengerti dengan judulnya penentuan morfologi. coba kirimkan ke e-mail saya saja. algoritma jaringan syaraf tiruan yang pernah saya buat dengan delphi baru algoritma propagasi balik dan waktu itu saya gunakan untuk pengenalan wajah untuk tugas besar kuliah pembelajaran mesin.
@nita : proses yang nita maksud adalah pengendalian area pandang? kalau demikian, sebelum digambar koordinat-koordinat tersebut ditransformasi dulu dengan transformasi area pandang (view transform).
– terima kasih masukannya, saya akan coba bahas algoritma (backpropagation+viewing transform) dan implementasinya dalam delphi dalam posting berikutnya. 😉
@$^$ : mungkin bisa coba kirim sampel gambar yang ingin dianalisis. siapa tahu ada cara sederhananya. kirimnya ke alamat ini : peb_ra at yahoo dot com
– sebenarnya bisa tanpa harus disimpan dulu ke dalam file, tetapi disimpan ke memori dalam bentuk TBitmap sehingga dapat diakses. coba eksplorasi tentang ‘Grabber’ di salah satu program kecil pada contoh DSPack.
@bianca : maaf baru bisa berkomentar. saya sudah lihat contoh gambarnya, tapi saya agak kebingungan juga untuk lebih detilnya. mungkin bisa diceritakan lebih lanjut (via e-mail)?
@no skill : pertanyaan nomor dua sebenarnya jawaban pertanyaan nomor 1. dpi itu adalah ukuran penskalaan resolusi citra (biasanya digunakan dalam pencetakan/penampilan pada monitor). resolusi dpi citra pada umumnya 72(untuk penampilan pada monitor). maksud dari 72 dpi adalah 72 pixel pada citra dapat dianggap sebanding dengan ukuran 1 inchi.
Wassalam,
Peb
Saya uda coba pake DSP pack tapi ternyata tidak bisa akses 2 camera secara langsung…. jadi saya memakai komponen lain….
Mungkin nga yah misalnya di program saya sudah muncul preview dari webcam trus itu preview ditampung di suatu tempat tapi tanpa menjadikannya dalam format gambar sehinnga langsung dapat diproses…. kk pebbie coba cek web ini yah http://www.roborealm.com saya ingin membuat gambar menjadi grayscale langsung seperti program roborealm tersebut.
Oh ya saya sudah mencoba properti dari canvas tapi ternyata hasilnya nihil….T_T
Mohon bantuannya yah….
Makasih banyak….
-$^$-
Peb, sori kalo mengganggu (just 4 hobby):
Pengen nanya nih.. Kalo cara buat sejenis multimedia interactive futuristik dengan TAMPILAN DOS pakai software apa ya? Saya ingin buat TAMPILAN dan cara kerjanya se-tipe dengan yang ada di film2 (box translucent, layar background hitam, tulisan biasanya berwarna hijau menyala, bunyi tit ketika searching), ya kira2 kalo di film tuh adegannya saat seorang intelligen mencari buronan di komputer, atau seorang hacker menerobos password rahasia.
Kalo tau software ato cara bwtnya toong kasi tau ya Peb.
Thanks.
mo nanya lagi ni mas..
kok citra pengubinan saya yang saya buat dengan perintah
‘somebitmap’.Canvas.Draw(x,y,’somebitmap’);
kalo digabungkan (blending) dengan image yang lain kok selalu muncul noise y??
untuk fungsi gabungnya kira-kira seperti ini :
procedure Tform1.Gabung(im1,im2 : TImage);
var
i, j,posisi : integer;
PC, PC2, PH : PByteArray;
w1,w2 : real;
begin
w1 :=trackbar1.Position;
w1 := w1/10;
w2 := 1-w1;
im2.Picture.Bitmap.Height := im1.Picture.Bitmap.Height;
im2.Picture.Bitmap.Width := im1.Picture.Bitmap.Width;
progressbar5.Min := 0;
progressbar5.Max := (im1.Picture.Bitmap.Width-1)*(im1.Picture.Bitmap.Height-1);
if (im1.Picture.Bitmap.PixelFormat = pf8bit) then
begin
for i := 0 to im1.Picture.Bitmap.Height-1 do
begin
PC := im1.Picture.Bitmap.ScanLine[i];
PC2 := im2.Picture.Bitmap.ScanLine[i];
PH := image1.Picture.Bitmap.ScanLine[i];
for j := 0 to im1.Picture.Bitmap.Width-1 do
PH[j] := Round(PC[j]*w1+PC2[j]*w2);
posisi := i*j;
progressbar5.Position := posisi;
end;
end;
if (im1.Picture.Bitmap.PixelFormat = pf24bit) then
begin
for i := 0 to im1.Picture.Bitmap.Height-1 do
begin
PC := im1.Picture.Bitmap.ScanLine[i];
PC2 := im2.Picture.Bitmap.ScanLine[i];
PH := image1.Picture.Bitmap.ScanLine[i];
for j := 0 to im1.Picture.Bitmap.Width-1 do
begin
PH[3*j] := Round(PC[3*j]*w1+PC2[3*j]*w2);
PH[3*j+1] := Round(PC[3*j+1]*w1+PC2[3*j+1]*w2);
PH[3*j+2] := Round(PC[3*j+2]*w1+PC2[3*j+2]*w2);
posisi := i*j;
progressbar5.Position := posisi;
end;
end;
end;
end;
ada solusi??
makasih banyak sebelumnya
ada 2 masalah yang saya lihat :
pf8bit : pengaksesan pixel untuk 8 bit tidak menghasilkan nilai RGB melainkan indeks ke palet 256 warna (tabel 256 elemen RGB). untuk melakukan blending pada citra 256 warna berpalet, setelah nilai RGB hasil blending didapat, indeks pada palet yang memiliki nilai RGB ‘terdekat’ dengan RGB hasil blending yang digunakan sebagai nilai pixel hasil.
pf24bit : sebaiknya dilakukan clamping yaitu pembatasan nilai ke batas bawah dan batas atas untuk menghindari overflow. jadi kalau hasil rounding bernilai < 0 maka dibulatkan ke 0 sebaliknya jika hasil rounding > 255 maka dibulatkan ke 255.
gmana kbrx mas feb….
saya dah kirimx email, tp gak nyambung2x…
alamatx cocok ya peb@pebbie.net
Mau nanya nih, saya lagi buat image encoding dengan metode lsb. Pertama saya scanline image untuk dapetin RGBnya, kemudian nilai rgb saya ubah menjadi biner. dari biner tadi saya buat rgb baru yang jadi warna hitam per 3 nilai biner.
Saya menggunakan string grid. SG untuk menyimpan nilai rgb perpiksel, SG1 untuk menyimpan nilai biner per piksel, SG3 untuk memcah nilai biner menjadi satu-satu. dan SG4 untuk mengambil nilai biner menjadi RGB baru per pixel. Kemudian dari SG4 di scanline menjadi gambar hitam.
Tapi yang jadi masalah, waktunya terlalu lama dan sering out of memory. ada ide gimana caranya untuk mempercepat dan meminimalisasi penggunaan memory. Soalnya saya kurang bisa menggunakan TStrings. berikut contoh program yang saya buat.
procedure TFEncode.GetRgb;
var i,j:integer;
marr : PRGBArray;
begin
LProses.Caption:=’Process : Retrieving Image RGB’;
LProses.Refresh;
Eimage.Picture.Bitmap.PixelFormat:= pf24bit;
sg.RowCount:=Eimage.Picture.Bitmap.Height;
sg.ColCount:=Eimage.Picture.Bitmap.Width;
for j := 0 to Eimage.Picture.Bitmap.Height-1 do begin //iterate row
marr := Eimage.Picture.Bitmap.Scanline[j];
for i := 0 to Eimage.Picture.Bitmap.Width-1 do begin //iterate column
sg.Cells[i,j]:=IntToStr(marr[i].Red)+’,’+IntToStr(marr[i].Green)+’,’+IntToStr(marr[i].Blue);
end;
end;
end;
procedure TFEncode.GetBiner;
var
i,j : integer;
hasil : TStringList;
t1,t2,t3,KATA, data:STRING;
begin
LProses.Caption:=’Process : Convert Image RGB to Binary’;
LProses.Refresh;
sg1.ColCount:=sg.ColCount;
sg1.RowCount:=sg.RowCount;
for i:=0 to sg.RowCount-1 do begin
for j:=0 to sg.ColCount-1 do begin
kata:=sg.Cells[j,i];
hasil:=split(kata,’,’);
t1:=IntTobin(StrToInt(hasil[0]));
t2:=IntTobin(StrToInt(hasil[1]));
t3:=IntTobin(StrToInt(hasil[2]));
data:=t1+’,’+t2+’,’+t3;
sg1.Cells[j,i]:=data;
end;
end;
end;
procedure TFEncode.GetLsb;
var
i,j,x,y,z : integer;
hasil : TStringList;
KATA,temp:STRING;
begin
LProses.Caption:=’Process : Encode The Binary’;
LProses.Refresh;
sg3.ColCount:=sg1.ColCount*24;
sg3.RowCount:=sg1.RowCount;
for i:=0 to sg1.RowCount-1 do begin
y:=0;
for j:=0 to sg1.ColCount-1 do begin
kata:=sg1.Cells[j,i];
hasil:=split(kata,’,’);
for z:=0 to 2 do begin
temp:=hasil[z];
for x:=0 to 7 do begin
sg3.Cells[y,i]:=copy(temp,x+1,1);
y:=y+1;
end;
end;
end;
end;
end;
procedure TFEncode.NewRgb;
var
i,j,y : integer;
t1,t2,t3,data:STRING;
begin
LProses.Caption:=’Process : Make The Black Image RGB’;
LProses.Refresh;
sg4.ColCount:=sg3.ColCount div 3;
sg4.RowCount:=sg3.RowCount;
for i:=0 to sg3.RowCount-1 do begin
y:=0;
j:=0;
repeat
t1:=sg3.Cells[j,i];
t2:=sg3.Cells[j+1,i];
t3:=sg3.Cells[j+2,i];
data:=t1+’,’+t2+’,’+t3;
sg4.Cells[y,i]:=data;
j:=j+3;
y:=y+1;
until j>sg3.ColCount;
end;
end;
procedure TFEncode.GetBImage;
var mbmp : TBitmap;
size, mw, mh, x, y : integer;
marr : PRGBArray;
KATA:STRING;
hasil : TStringList;
begin
LProses.Caption:=’Process : Making Black Image’;
LProses.Refresh;
mbmp := TBitmap.Create;
mbmp.PixelFormat := pf24bit;
mbmp.Width := sg4.ColCount;
mbmp.Height := sg4.RowCount;
mw := mbmp.Width; mh := mbmp.Height;
marr := mbmp.ScanLine[0];
size := Integer(mbmp.ScanLine[1]) – Integer(mbmp.ScanLine[0]);
for y := 0 to (mh – 1) do begin
for x := 0 to (mw – 1) do begin
//the heart of our mechanism – this loop goes through pixels of each row
//and we can modify contents of each pixel’s color data
kata:=sg4.Cells[x,y];
hasil:=split(kata,’,’);
marr^[x].Red :=strtoint(hasil[0]);
marr^[x].Green := strtoint(hasil[1]);
marr^[x].Blue := strtoint(hasil[2]);
end;
Integer(marr) := Integer(marr) + size;
end;
EHasil.Picture.Graphic:=mbmp;
HW.Caption:=inttostr(mbmp.Width);
HH.Caption:=inttostr(mbmp.Height);
mbmp.Free;
end;
hehehe.. pake stringgrid sih..
terlalu banyak konversi string to integer dan sebaliknya yang jadi lama
langsung nyemplung ke scanline aja dan beroperasi pada tipe data numerik (integer)..
mas bagaimana cara mendapatkan nilai pixels biner atau monochrom
@nonik: cara sederhananya (walau kurang efisien secara memori) dengan mengonversi bitmap dari format pixel pf1bit atau pf4bit menjadi pf24bit. untuk bitmap yang format aslinya adalah biner maka nilai pixel RGB yang ada hanya (0, 0 ,0) dan (255, 255, 255). untuk memeriksa cukup menggunakan properti r (warna merah).
mas,maksud saya tu bagaimana caranya untuk mendapatkan nilai pixels biner(monochrome) dengan nilai 0 untuk warna hitam dan 1 untuk warna putih,tolong dijawab ya dan kasi tau programnya yang lengkap!!! Makasih banyak ya mas Peb…tak doain semoga cepet selesai TA-nya
mas,boleh ga’ kalo saya nanya’ yang bukan masalah citra digital tapi masalah bahasa automata dan teknik kompilasi karena saya bingung harus nanya ke siapa, yang saya tau cuma GAIBlog ini ja, dan kayaknya semua tanya jawab disini cuma mengenai masalah citra digital, makanya saya nanya’ gitu!?! gimana mas?atau kalo mas tau soal tanya jawab masalah bahasa automata dan kompilasi, tolong mas kasi tau! Makasih…
Mas pebbie..saya minta tolong ni…
saya buat fungsi untuk baca image bmp grayscale kemudian saya mau ubah nilai matriks pixel bmp ke dalam baris(array) dengan metode zig-zag misalnya.
matriks 4 x 4
23 10 3 1
9 7 2 0
8 1 0 0
4 1 0 0
jadi kalo di ubah ke dalam baris [23 10 9 8 7 3 1 2 1 4 1 0 0 0 0 0]
saya udah coba buat fungsi untuk matrik ke baris dan posting di delphi-id juga tapi
dengan metode berurutan yaitu baris1 lanjut baris selanjutnya.
gimana mas peb ya kalo dengan metode zig-zag tersebut buat ubah nilai pixel ke baris dengan metode zig-zag……mohon bantuannya mas peb..
unit UnitBacaImage;
interface
uses Unit1,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, Buttons, StdCtrls, ExtDlgs;
Function BacaImage(x :Timage): Pmatrik;
implementation
Function BacaImage(x :Timage): Pmatrik;
var
h,w,i,j : integer;
grey : PMatrik;
PH :PbyteArray;
begin
h := x.Picture.Height;
w := x.Picture.Width;
setlength(grey,h,w);
for i:= 0 to h – 1 do
begin
PH := x.Picture.Bitmap.ScanLine[i];
for j:= 0 to w – 1 do
begin
grey[i,j]:= PH[j];
End;
End;
BacaImage := Grey;
end;
end.
unit UnitMatrikJadiBaris;
interface
uses Unit1,Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,ExtCtrls,ComCtrls,Buttons,StdCtrls,ExtDlgs;
function matrikjadibaris(B : PMatrik) : PArray;
implementation
function matrikjadibaris(B : PMatrik) : PArray;
var
i, j, baris, kolom : integer;
indeks : integer;
deret : PArray;
begin
setlength(deret, length(B)*length(B[0]));
baris := length(B);
kolom := length(B[0]);
indeks := 0;
for i := 0 to baris – 1 do
begin
for j := 0 to kolom – 1 do
begin
deret[indeks] := B[i][j];
inc(indeks);
end;
end;
matrikjadibaris := deret;
end;
end.
procedure TForm1.BitBtnWatermarkingClick(Sender: TObject);
var
hasilpixel : PArray;
k : integer;
ww : textfile;
begin
data1 := BacaImage(formcitra.Image1);
barispixel := matrikjadibaris(data1);
end;
end.
mungkin ini saja mas pebbie…mohon maaf, terima kasih….
@nonik : sudah cari di google dulu? keywordnya image thresholding
@arfan : boleh-boleh saja diskusi tentang otomata dan kompilasi. silakan tulis di bagian request.
@yadi : hoo.. maksudnya yang di delphi-id itu toh.. oke saya coba dulu di rumah deh.. lagi di warnet nih.. baru bisa online lagi..
asswrwb
Mas pebbie..saya lagi sedang ngerjain juga…
kebetulan dapet algoritma di matlabnya…untuk scan matriks zigzag(M x N)..
dan udah saya terjemahanin ke delphinya…
cuman masih ada hangnya aja…setelah di running…
saya akan coba terus mas pebbie…
doain ya mas pebbie….
terima kasih…jadi malu ni….
wasswrwb…
Terima kasih banyak mas pebbie….
aduh udah hampir sepekan saya nih ngerjainnya…
alhamdulilllah akhirnya ada solusinya juga…
sekali lagi terima kasih mas pebbie..
good success selalu buat mas peb..aminn…ya rabbal ‘alamin.
mas mau nanya nih gimna cara buat program dg delpi untuk nampilkan matrik dari gambar bitmap? Thanks sblmnya
Mau nanya ni…
Saya ubah gambar RGB ke grayscale / keabuan pakai metode YIQ, sehinggan natinya yang diambil adalah komponen Y saja untuk gambar keabuannya menurut teori yang ada, formulanya dapet dari matlab.
kalo di buku pengolahan citra pake delphi (pak ahmad balzah ada) cuman harus pake metode YIQ ini
Tapi kenapa hasil konversinya itu bukan seperti gambar grayscale melainkan seperti gambar klise Photo( gambar negatif album photo)
Saya deklarasikan tipe
type
PMatrik = array of array of real;
DWarna = record
biru : PMatrik;
hijau : PMatrik;
merah : PMatrik;
end;
YIQ = record
Y : PMatrik;
I : PMatrik;
Q : PMatrik;
end;
public
pixelRGB : Dwarna;
keabuan : YIQ;
pixelkeabuan,pixelkeabuan2 : PMatrik;
Fungsinya seperti ini :
function RGBtoYIQ(X : DWarna): YIQ;
var
y : YIQ;
h,w,j,i : integer;
begin
h := length(x.biru);
w := length(x.biru[0]);
setlength(y.Y,h,w);
setlength(y.I,h,w);
setlength(y.Q,h,w);
for i:= 0 to h – 1 do
for j:= 0 to w – 1 do
begin
y.Y[i,j] := 0.299*(x.merah[i,j]) + 0.857*(x.hijau[i,j]) + 0.114*(x.Biru[i,j]);
y.I[i,j] := 0.596*(x.merah[i,j]) – 0.274*(x.hijau[i,j]) – 0.322*(x.Biru[i,j]);
y.Q[i,j] := 0.211*(x.merah[i,j]) – 0.523*(x.hijau[i,j]) + 0.312*(x.Biru[i,j]);
end;
RGBToYIQ := y;
End;
Kemudian saya load gambar RGB
procedure TFormUtama.Button6Click(Sender: TObject);
var
fcrgb : string ;
begin
if (openpicturedialog2.Execute) then
begin
if (form2 = nil ) then
application.CreateForm(TForm2, form2);
form2.Image1.Picture.LoadFromFile(openpicturedialog2.FileName);
form2.ClientHeight := form2.Image1.Picture.Height;
form2.ClientWidth := form2.Image1.Picture.Width;
form2.ClientHeight := form2.Image1.Picture.Height;
case
(form2.Image1.Picture.Bitmap.PixelFormat) of
pf1bit : fcrgb := ‘biner’;
pf8bit : fcrgb := ‘keabuan’;
pf24bit : fcrgb := ‘true color’;
end;
end;
end;
kemudian lakukan konversi RGB ke grayscale
procedure TFormUtama.Button7Click(Sender: TObject);
begin
pixelRGB := BacaImageRGB(form2.Image1);
keabuan := RGBtoYIQ(pixelRGB);
pixelkeabuan2 := keabuan.Y;
edit4.Text := inttostr(length(keabuan.I));
if (form3 = nil) then
application.CreateForm(TForm3, form3);
form3.Left := form3.Left + 120;
form3.Top := form3.Top – 25;
end;
di form3nya untuk menampilkan citra grayscalenya listingnya seperti ini :
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
logpal = record
lpal : Tlogpalette;
entry : array [0..255] of TPaletteEntry;
end;
type
TForm3 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
paletkeabuan : logpal;
implementation
uses
unitutama;
{$R *.dfm}
Procedure GambarIDwt(y:PMatrik;x:Timage);
var
PH : PbyteArray;
bitmap2 :Tbitmap;
i,j,p :integer;
begin
x.Height :=length(y);
x.Width :=length(y[0]);
bitmap2 := Tbitmap.Create;
bitmap2.Height :=length(y);
bitmap2.Width :=length(y[0]);
x.Picture.Graphic := bitmap2;
x.Picture.Bitmap.PixelFormat:= pf8bit;
x.Picture.Bitmap.Palette := createpalette(paletkeabuan.lpal);
for i:= 0 to length(y)- 1 do
begin
PH := x.Picture.Bitmap.ScanLine[i];
for j:= 0 to length(y[0])- 1 do
begin
p := round(y[i,j]);
PH[j]:= p;
end;
end;
end;
procedure TForm3.FormCreate(Sender: TObject);
var
i :integer;
begin
paletkeabuan.lpal.palVersion := $300;
paletkeabuan.lpal.palNumEntries := 256;
for i := 0 to 255 do
begin
paletkeabuan.entry[i].peRed := i;
paletkeabuan.entry[i].peGreen := i;
paletkeabuan.entry[i].peBlue := i;
end;
end;
procedure TForm3.FormShow(Sender: TObject);
begin
GambarIDwt(formutama.keabuan.Y,Image1);
end;
end.
Selamat sore
artikel ini bisa buat analisa pixel sebuah gambar tidak? kaya aplikasi Digital Mark Reader gitu deh, klo bisa kasih tau sintaks contohnya ya
Terima kasih
bantu aku ya…. aku mau bikn program delphi untuk konversi bitmap semua bit depth ke format 24bit. ntar bitmapnya mau aku break trus direkonstruksi lg by pixels RGB nya.help me ya… makasih
Salam. Mas, numpang ny ya…
1. gimana ya menghitung jarak antara dua titik dalam koordinat logis, mungkin ada source codenya?
2. gmn cara konversi dari koordinat titik pada canvas/image ke DBGrid?
Terima kasih sebelumnya.wassalam
Salam mas, mo nanya2 ya….
1. gimana cara untuk membuat absis dan ordinat dari suatu gambar???klo bisa ama source codenya ya mas.
2. bagaimana cara mendeteksi posisi pointer dalam gambar?? jadi ketika pointer menunjukkan satu titik di gambar, maka komponen x dan y-nya bisa diketahui.
3. dari gambar topografi, untuk menentukan ketinggian, apa harus di define satu2 warna dan ketinggiannya???
Makasi mas……….
@Lukman:
1. pakai euclidean distance/panjang vektor aja? len := sqrt(dx*dx+dy*dy)
2. aku tak mengerti pertanyaannya.
@tia:
1. aku tak mengerti pertanyaannya.
2. pake event handler OnMouseMove aja
3. kalau warnanya ada dalam fungsi tertentu (mis. greyscale) tinggal ditentukan aja berapa tinggi pada intensitas pixel minimum dan maksimum
mau bertanya ? kalo image itu bisa dimisalkan dengan matriks
lagi ta neeh .ada yang tau ga penggabungan image jadi satu(panorama) algoritmanya apaan?
@CUNGKRING: “image registration”
sayah masih bingung neeh kalooo penggabungan images bisa di gambarkan dengan matriks transformasi refleksi gak.
image mosaik dan image split algoritmanya kaya gimana bisa bantu in mencarikannya ? web nya apaan
maaf mas kl pertanyaanya membingungkan yang no 2. ibu maksudnya. kita punya satu titik di image, kemudian kita proses menjadi data di dalam tabel. Gmana ya mas, cranya. terima kasih seblumnya.
@lukman: saya masih tidak mengerti dengan pertanyaannya. maksud proses itu apa dan hasil proses (data di dalam tabel) itu seperti apa.
Mas, mau nanya nih?
Gimana sih caranya ngitung panjang dan lebar dari suatu gambar sehingga di dapatkan ukuran centi meter bukan pixel?
Tolong mas yaa…!
Makasih.
Mas….mau nanya. aq lagi bikin kompresi citra bitmap pake huffman coding.
Aq bingung nyimpen hasil code binernya untuk nanti proses dekompresi.
Apakah disimpan dalam matrik atau gimana tolong ya mas….thanks
boleh ga share ma aku mengenai kompresi citra huffman??
@muna: hasil dekompresi bisa disimpan sementara ke dalam matriks sebelum ditransfer ke bitmap atau file
mas muup mw tanya ne….untuk kompresi citra dengan huffman itu langkah penyusunan koding yang tepat tu kek gimana mas? tengs.
halo…mas mau nanya lagi nih. nilai2 piksel kalo aq copy ke canvas image kok ada warna merah itu kenapa ya?
Aq pernah nyoba nilai piksel gambar aku taruh di stringGrid, terus aq copy lagi ke canvas . Kok ada warna merahnya. makasih sebelunya
@muna: kemungkinan nilai yang anda masukkan bernilai 0-255 sedangkan format pixel (properti PixelFormat) dari bitmap image (Image.Picture.Bitmap) bukan pf8bit (pf24bit atau pf32bit). sehingga yang anda atur hanya nilai merahnya saja. *mungkin?*
mas,makasih infonya. Format pixel yang saya masukkan memang 8bit ( grayscale), tetapi di kanvas kok tetep merah. tolong ya mas ya?………makasih.
format pixel 8 bit bukan berarti grayscale (ini kesalahpahaman yang sering terjadi). format pixel 8 bit itu maksudnya setiap pixel menyimpan informasi indeks ke tabel Palet yang elemennya berisi informasi RGB. Bitmap dengan format pixel 8 bit mampu menggunakan model warna RGB tetapi banyaknya warna (kombinasi RGB) maksimum yang dapat ditampilkan hanya 256 warna saja.
Alow mas pebbie….
Mau nanya lagi neh. Masih bingung..maklum ilmunya masih dangkal.
Misalkan ada program simpan nilai piksel ke stringgrid spt ini
if( image1.Picture.bitmap.PixelFormat= pf8Bit) then
begin
for y := 0 to image1.Picture.Height-1 do
begin
Pimg := image1.Picture.Bitmap.ScanLine[y];
for x := 0 to image1.Picture.Width-1 do
begin
ST.Cells[x,y] := IntToStr(Pimg[x]);
end;
end;
Terus dari nilai2 di cell stringGrid aq simpan di image canvas begini
image2.ClientHeight:=St.colCount;
image2.ClientWidth:=St.RowCount;
for j:=0 to image2.Height-1 do
for i:=0 to image2.Width-1 do
form1.Image2.Canvas.Pixels[i,j]:= strtoint( st.cells[i,j]);
Hasilnya gambarnya ada merah2nya n setelah aq liat nilai pikselnya kok lain…..Nilainya sekitar 31-an…..
Terus yang bener gimana mas biar nilai dari stringGrid jadi nilai piksel di image itu?
Thanks bgt ya mas………..
Mohon responnya
kalau gambarnya greyscale waktu menulis kembali ke canvas seperti ini :
tmp := strtoint(st.cells[i,j]);
form1.image2.Canvas.Pixels[i,j] := RGB(tmp, tmp, tmp);
atau PALETTERGB(tmp, tmp, tmp)
muna lagi nih mas, yang kmarin tak coba sdh bisa, tapi nilai pixel nya jadi berubah ya? makasih buuuanget ya. Kalau gambarnya 8 bit yang bukan grayscale (RGB) menuliskan kanvasnya gimana? thanks ya……di tunggu.
Mas peb…..
Mau tanya…. Caranya menuliskan ke canvas untuk indeks palet gimana (citra 8 bit) .
Yang mana nilai indeks paletnya dari stringgrid.
Mohon rsponnya ya mas. Dah nyari2 ga bisa juga
maksih
kalau untuk citra 8 bit, pakai ini (komponen TBitmap)
procedure putpixel(bmp: TBitmap; x,y:integer; idxwarna:byte);
var
p : PByteArray;
begin
p := bmp.Scanline[ y ]; { asumsi bmp.PixelFormat = pf8bit; }
p[ x ] := idxwarna;
end;
bie mau nanya..
saya baru belajar ttg image masih pemula.
1. misalnya ada citra ukuran 30×30 apakah berarti jumlah pixelnya = 900?
2. gimana mencari nilai masing2 R dan G dan B dari sebuah citra RGB, apakah ada rumusnya?
3. apakah citra RGB itu harus dirubah ke Greyscale dulu untuk mendapatkan informasi nilai matriksnya?
makasih jawabannya,..
@mei: silakan, saya jawab sebisanya yah.
1. betul.
2. citra RGB bisa jadi beberapa macam
– citra 4 atau 8 bit, maksudnya tiap pixel direpresentasikan dengan byte (8 bit) atau satu byte untuk 2 pixel. oleh sebab itu nilai yang mungkin adalah sebanyak 256 kombinasi warna. 256 kombinasi warna ini menggunakan tabel look-up yang berisi nilai RGB. jadi belum tentu pixel bernilai 0 itu hitam (R=0, G=0, B=0) tetapi tergantung pada nilai RGB di tabel palet indeks ke 0 (bisa saja justru di tabel palet indeks ke 0 kita berikan warna putih (R=255, G=255, B=255))
– citra 16 bit, jadi tiap pixel direpresentasikan sebagai 2 byte (16) bit. citra 16 bit sudah mengalokasikan nilai RGB pada tiap pixel/titiknya jadi tidak memerlukan tabel palet. yang perlu diperhatikan adalah bagaimana nilai RGB dikodekan ke variabel berukuran 16 bit. kemungkinan yang umum ada 2 yaitu tiap komponen warna mendapat jatah 5 bit sehingga 1 bit sisanya tidak terpakai. atau komponen yang ada di tengah (hijau) mendapat jatah lebih yaitu 6 bit (R5G6B5).
– citra 24 bit, tiap pixel direpresentasikan sebagai 3 byte. oleh sebab itu tiap komponen mendapat jatah 1 byte. kemungkinan warna yang dihasilkan adalah 2 milyar warna.
– citra 32 bit, tiap komponen tetap dialokasikan sebagai 1 byte namun 1 byte terakhir kalau digunakan maka biasanya berisi informasi untuk operasi penggabungan citra (image blending).
untuk mendapat nilai RGB dari citra bisa baca lagi tulisan saya di atas dari awal menggunakan Pixels dan 3 fungsi Get[R,G,B]Value(dword)
3. tidak harus, tergantung nilai apa yang ingin didapat. kalau memang informasi yang diinginkan adalah intensitas (luminansi) maka betul, harus dikonversi atau tiap pixel dimasukkan ke fungsi penghitung nilai intensitas luminansinya. kalau informasi yang diinginkan adalah spektrum warna (hue) maka lain lagi.
Mas, senang bisa nemuin blog ini,
Ada mau nya se he…
Gini mas, q mw bikin aplikasi pake JST backpropagation tp mw gunain delphi, masalahnya q nda ngerti gmn untuk source coding algoritmanya pada delphi, bs bantu mas?
Thanks ya…
Mas Feb, untuk ekstrasi audio bisa pake metode LPC (linier predictive Coding) kan? trus untuk aplikasinya bisa pake delphi? ada codingnya nda? Kalau untuk transformasinya sinyal pake apa? thanks banget……….
@Yohanes:sabar ya, baru masuk antrian draft posting. mudah-mudahan minggu depan sudah bisa ditampilkan pembahasan dan implementasinya dengan delphi.
@Agnes: ya, LPC bisa digunakan untuk menganalisis sinyal dalam ranah sekuensial (mis. suara). tapi saya belum pernah membuat implementasinya. 🙂
nih saya derim. di delphi-id yang nanya tentang extract warna.
1. apa bedanya akses pixel dengan scanline?
2. apa maksud nilai y dibawah ini:
@derim: akses menggunakan Pixels lebih lambat dan menghasilkan TColor, untuk mendapatkan nilai komponen R,G,dan B-nya perlu menggunakan fungsi lain (misal GetRValue(c)) sedangkan kalau menggunakan scanline yang dihasilkan adalah pointer ke memori yang menyimpan masing-masing pixel dalam representasi yang bergantung pada nilai PixelFormat. untuk kasus di atas saya asumsikan PixelFormat-nya bernilai pf24bit. jadinya, tiap pixel disimpan sebagai 3 byte. maksud y itu adalah baris (nilai yang valid adalah 0 sampai Tinggi Bitmap atau banyaknya baris dikurangi 1). baris pertama (y=0) adalah baris yang paling atas.
wah makasih bgt mas pebbie…
buat mas Yohannes, kok sama yaw keinginan dan maksud kita…
saya juga menunggu lho Mas Pebbie…
semoga ilmu Anda yang bermanfaat kelak menjadi pendamping setia di alam baka..
terima kasiiih
hai..mas… ato siap yang bisa bantu aq , cara mendeteksi wajah pada hasil pengambilan gambar dari webcam ya(face rezognation)!!!dan kalo bisa dikasi sorce codenya dengan menggunakan delphi. AQ baru bisa sampe proses pengolahan image itu sampe proses treshold, bagai mana cara selanjutnya agar kita dapat meng akses wajh orang pada gamabr yang bergerak, bukan gambar statis kayak photo, tapi hasil gambar pada pengambilan dari web cam,
Salam kenal k,,aq dari kupang,aq senang ktmu blog ini..
pertanyaannya:
1. KK tahu caranya membersihkan canvas pada image, maksudnya gini,,Sebagai contoh: Dalam 1 aplikasi aq taruh 1 bh image,1 buah button yg captionnya “persegi” dgn sintaks image1.canvas.rectangle(100,200,400,600),lalu ada 1 bh button yg captionnya “New/Baru”,,nah kk tahu sintaks untuk tombol “baru”,,tolong ya k..
2. dalam procedure floodfill,ada parameter Tfillstyle,,untuk mengisi Tfillstyle contohnya adalah fsborder,selain fsborder nasih ada yg lain ?? Tolong buat daftarnya yah.. soalnya pada turbo pascal fillstyle nya agak beda dgn pada delphi.
3. kk tahu caranya menggerakkan citra pada image delphi sehingga bisa di simpan dengan ekstensi GIF..? klo bisa dengan cintohnya ya
oh iya masih ada yg ingin tahu nih..
– Secara Default pixelFormat pada Timage brp bit ?? lalu klo mw pakai 24 bit bgmana caranya supaya gmbr rectangle atau ellips dsb bisa ditampilkan di image
– Apa image dgn pixelFormat 24bit lebih bagus gambarnya jika dikonversi menjadi jpg/bmp image
– lalu apa perbedaan terbesar dari pixel yg berformat 8bit,24bit,32bit dll,tolong ya kk
– Tolong juga kasi daftar style untuk Brushstyle dan Penstyle pada canvas image
– Yg terakhir untuk procedure ARC, aq rada-rada bingung nih,soalnya parameternya sdkt berbeda dgn di pascal, Procedure ARC(x1:integer;y1:integer;x2:integer;y2:integer;x3:integer;y3:integer;x4:integer;y4:integer);
x1,y1-x2,y2 aq ngerti tapi x3,y3,x4,y4 aq bingung jadi misalnya diaplikasikan dengan SpinEdit yg memiliki nilai integer..aq harus kasih maxvaluenya berapa untuk x3,y3,x4,y4..jelaskan dong x3,y3 dan x4,y4 supaya misalnya arc yg ingin dibentuk bisa jadi sesuai dgn yg diinginkan…
makasih banyak ya atas jawabannya……….
@pangeran :
1. clear canvas : pakai saja FillRect seperti berikut
with image1.canvas do begin
Brush.Style := bsSolid;
Brush.Color := clWhite; { warna latar belakang, misal putih }
Pen.Style := psClear;
FillRect(Image1.ClientRect);
Pen.Style := psSolid;
end;
2. dari definisi floodFill sbb
procedure FloodFill(X, Y: Integer; Col: TColor; FillStyle: TFillStyle);
parameter FillStyle ada 2 yaitu:
– fsBorder : ini mirip boundary fill, arsir akan dilakukan sampai ketemu pixel berwarna Col (sebagai batas)
– fsSurface : arsir dilakukan selama pixel yang ditemui warnanya sama dengan Col
3. maaf, nggak bisa bantu (silakan cari sendiri di google) 😉
4. default pixelformat saya tidak tahu, sepertinya kalau tidak pf32bit maka akan mengikuti setting display monitor.
5. untuk menggambar (rectangle, elips) tidak terpengaruh oleh properti PixelFormat. gunakan saja prosedur gambar dari TCanvas
6. bit depth (pixel format) akan mempengaruhi sebanyak apa kombinasi warna yang bisa disimpan dalam image. misal untuk pf8bit maka kombinasi warna yang mungkin hanya sebanyak 28 atau 256 warna saja. sedangkan 24 bit dapat menyimpan kombinasi warna merah sebanyak 256 warna, hijau, dan biru sehingga total sebanyak ~ 2 milyar warna (oleh sebab itulah disebut true color), 16 bit dapat menyimpan kombinasi 65 ribu warna. khusus untuk 32 bit, banyaknya warna yang bisa disimpan sama dengan 24 bit, sedangkan 8 bit sisanya biasanya tidak digunakan atau digunakan untuk menyimpan informasi transparansi (alpha channel) untuk melakukan penggabungan (blending) citra.
7. daftar style bisa dilihat sendiri di Help delphi
8. prosedur Arc (garis lengkung)
parameter x1y1 dan x2y2 sama seperti menggambar elips
dengan tambahan x3y3 dan x4y4, parameter ini adalah parameter untuk membatasi garis elips yang digambar. misal dari titik tengah elips (misal x0y0) ditarik garis ke x3y3 dan x4y4 maka garis elips yang digambar hanyalah dari titik perpotongan garis elips dengan garis x0y0-x3y3 dan perpotongan garis elips dengan garis x0y0-x4y4 melawan arah gerakan jarum jam.
Mas Pebbie, maaf kalo mau ngerepoti ….. (udah stress banget)
saya coba2 mau ganggu image hasil steganografi,
bisa minta tolong dikasih lihat full-script untuk menampilkannilai RGB dalam stringgrid?
saya udah coba script mas Pebbie diatas (jawaban untuk mas Tris), tapi kok ga berhasil terus.
kalo bisa caranya mengembalikan nilai di stringgrid ke image lagi, please
Oh ya … saya ngeload gambarnya pake openpicture dialog.
tolong mas ya, rencananya saya mau ubah nilai RGB tersebut dengan nilai yang lain (seakan2 image yang dikirim terkena noise), sehingga saat dikembalikan ke image lagi apakah data yang tersembunyi didalamnya masih bisa dipertahankan …
@teamburger:kalau tujuannya mau dikembalikan lagi ke image lebih baik nggak perlu ke stringgrid, soalnya cuma buang2 waktu aja. lebih baik langsung diubah di pixelnya. pakai saja kode getpixel dan putpixel di atas. jadi prosesnya
– baca nilai RGB (pakai GetPixel)
– ubah nilai RGB (r, g, dan b)
– tulis kembali ke image (pakai PutPixel)
misal saya punya image diform
bagaimana caranya agam image tersebut memutar gambar 90 drjt, 180 drjat dgn menggunakan pixel dan gimana caranya memutar vertikal dan horizontal
tks….
klo buat warna background pada image aq menggunakan akses pixel dgn colordialog
sehingga sintaksnya canvas.pixel[i,j]:=colordialog1.filename,,dgn i,j adalah image width dan image height..kk bisa kasih sintaks dgn scanline,untukpemilihan warnanya aq menggunakan colordialog.
sebenarnya aq lgi susun skripsi,bisa minta pendapat k pebbie..waktu kuliah grafika komputer kami menggunakan pascal..sekarang aq coba buat seperti itu utk menampilakan citra di delphi..kira-kira judul apa yang pa bwt skripsis..soalnya aq bingung menyusun kata-kata yg pas bwt menentukan judul
sebenarnya aq lgi susun skripsi,bisa minta pendapat k pebbie..waktu kuliah grafika komputer kami menggunakan pascal..sekarang aq coba buat seperti itu utk menampilakan citra di delphi..kira-kira judul apa yang pas bwt skripsis..soalnya aq bingung menyusun kata-kata yg pas bwt menentukan judul..
Mas Pebbie, gmn tuh pembahasan dan implementasi JST algoritma backpropagation dengan delphi?
He…menagih janji nih,^_^
Sibuk ya Mas…
mas,sorry neh mo nanya tentang J2ME,ada ga’method untuk mengambil pixel di J2ME?
thanks
@echy: pakai method getRGB dari class Image
int[] imageData = new int[inputImage.getWidth() * inputImage.getHeight()];
inputImage.getRGB(imageData, 0, inputImage.getWidth(), 0, 0, inputImage.getWidth(), inputImage.getHeight());
nanti untuk mengakses tiap pixelnya (r, g, b) di posisi (X, Y) dari image data pakai formula
int pixel = imageData[Y * inputImage.getWidth() + X];
int r = 0xFF & (pixel >> 16);
int g = 0xFF & (pixel >> 8);
int b = 0xFF & pixel;
k pebie kenapa nama komponen di delphi awalannya selalu huruf ‘T’ ? sepert Tcanvas,Tbutton,Tform dlll
Apa artinya atau singkatannya..
Makasih ya
Pangeran: itu cuma kesepakatan penulisan aja kok.. untuk menyatakan bahwa itu adalah tipe baru (baik itu sebagai kelas atau record) sehingga kalau memberi nama variabel tinggal membuang ‘T’nya saja (contoh praktisnya).
ka misalnya klo untuk objek bitmap tipe datanya Tbitmap, klo giv ..?
makasih
ka klo pada objek edit kita bisa melakukan setfocus dgn menekan tombol enter pada keyboard misalnya dgn perintah pada event onkeypress
if key =#13 then edit2.setfocus;
kenapa pada object spinedit tidak bisa ,,kk tau caranya…?
Salam kenal pak Peb Ruswono Aryan
Nama saya adnan, alumni teknologi pascapanen IPB. Pertama berkenalan dengan citra digital saat ambil kuliah matakuliah ini. Semenjak itu bisa dibilang saya jatuh cinta dengan ilmu pengolahan citra digital ini, hanya sayang saya tidak mengerti banyak tentang bahasa pemrograman karena latar belakang bukan ilmu komputer tapi pertanian.
Di bidang pascapanen, Image process sangat berguna untuk inspeksi atau sortasi hasil panen, atau mengamati perubahan warna pada hasil panen selama penyimpanan. Dengan citra digital ini, tentu pengamatan warna dan tekstur tersebut menjadi sangat cepat dan relatif murah. Bayangkan saja, alat standar untuk pengamatan warna skala lab paling muran harganya Rp 40 juta (pasti sekarang harganya lebih mahal lagi). sedangkan dengan ilmu image process cukup bermodalkan program aplikasi, web kamera dan buku pemrograman:-).
Program pengamatan warna yang pernah saya buat untuk tesis saat itu dalam bahasa basic. Sekarang saya mencoba belajar untuk membuatnya dalam bahasa delphi.
Saat ini saya menjadi peneliti pasca panen di BPTP Papua. Alat-alat pasca panen yang menunjang untuk penelitian pascapanen bisa dibilang tidak ada disini. jadi yang bisa saya gunakan untuk tool penelitian pascapanen adalah image process ini. Saya ke pulau yang besarnya 3 kali pulau jawa ini hanya bermodal laptop, web cam dan buku delphi.
Saya minta bantuan pak peb. Misalkan saya ingin menampilkan warna merah (kalau sudah bisa ketemu nanti juga bisa untuk mencari nilai D, B dan HSI pastinya). Dengan algoritma yang mirip waktu saya buat menggunakan VB, ternyata tidak bisa diterapkan di delphi. Dari beberapa literatur yang saya dapat, saya membuat seperti ini kode delphinya:
procedure TFormUtama.Button1Click(Sender: TObject);
var
i, j, merah : integer;
R, total : extended;
tempR: byte;
P : pbytearray;
begin
total := 0;
tempR := 0;
R := 0;
for i:= 0 to (formhasil.image.picture.height-1) do
begin
P := formhasil.image.picture.bitmap.scanline [i];
for j:= 0 to (formhasil.image.picture.width-1) do
begin
tempR := round (P [3*j+2]);
R := round (R + tempR);
total := total + 1;
end;
merah := round (R/ total);
edit1.text := inttostr (merah);
end;
end;
setelah program dijalankan ada keterangan sebagai berikut:
[Hint] UnitUtama.pas(193): Value assigned to ‘tempR’ never used
Dugaan saya berarti nilai R tidak pernah diperoleh dari scanline P. dan memang nilai merah dari gambar yang telah diketahui nilai R nya sebelumnya, yang ditampilkan pada Tedit nilainya ngawur.
Saya mohon bantuan pak peb untuk memberitahu saya bagaimana seharusnya kode tersebut ditulis. Terimakasih banyak sebelumnya
mungkin maksudnya nilai tempR tidak pernah digunakan itu bukan yang di dalam loop, tetapi yang di luar loop (inisialisasi tempR dengan 0 padahal di dalam loop nilai tempR selalu diperbaharui)
procedure TFormUtama.Button1Click( Sender: TObject );
var
i, j, merah : integer;
R : extended;
total : integer;
tempR : byte;
P : pbytearray;
begin
total := 0;
R := 0;
for i := 0 to ( formhasil.image.picture.height - 1 ) do begin
P := formhasil.image.picture.bitmap.scanline[i];
for j := 0 to ( formhasil.image.picture.width - 1 ) do begin
tempR := P[3 * j + 2];
R := R + tempR;
total := total + 1;
end;
merah := round( R / total );
edit1.text := inttostr( merah );
end;
end;
tanks bro, thats so helfull. terimakasih koreksiannya ya
KK tau di halaman mana komponen TBaseReport berada..? Cara menginstalnya pada delphi 7 bagaimana caranya..? Thx atas jwbnya
hai…
mau nanya nih kak tau cara menghapus salah1 object pada kanvas image sehingga mirip seperti fasilitas erase di paint bawaan windows
@may:menghapus pada paint sama dengan menggambar dengan warna arsir yang sama dengan warna kanvas (mis. putih).
thx atas jawabannya,,mau nanya lagi nih,,dosen aq suruh buat scalling gambar,misalnya seperti di Paint itu , objek grafis yang ditarik kesamping dgn mouse akan membesar,jika di tarik kembali ke kiri akan kembali seperti semula,,kak bisa bantu sintaxnya dengan menggunakan delphi..?
mas..peb.. boleh nanya dunk..
1. buat greyscale di video, gimana ya caranya? klo dari image dah bisa. aq ganti picture.bmp ke video avi ga bisa.
2. capture image real time with webcam per satuan waktu, pakenya grabber ma tscap32. gimana caranya ya?
thx b4.. ranee..
bantuin aq dunk aq mau mendeteksi bangun datar, pakai metode chain code, aq bingun mengenali polanya, terus algoritma sama programnya aq juga belum begitu jelas.bantuin ya…thks bgt…
mas…
saya mau tanya,bagaimana cara membagi nilai pixel pada image dengan menggunakan Teknik Multiple Description Coding?
mas mau tanya gimana caranya ngluarin matrix image monochrome…? kebanyakan contoh2 RGB.. lg belajar jd malah tambah bingung.
mas bisa ngasi contoh sintak zoom image menggunakan delphi egak?
Pleaze..
Peb gw mau tanya neh … kalo gue mau buat face recognition … untuk di delphinya apa harus pake region ?? oiaa punya source code wavelet di delphi nda’ butuh bgt neh … makasii peb
terimakasih
mas…
sta mw tx program pencerminan donk…
Mas Pebbie, aku mau tanya nie mengenai Refleksi / pencerminan dengan menggunakan VB 6 source code nya bgmn, aku bingung megenai tgs itu yg kurang..
mohon bantuannya mas.
Pencerminan/Refleksi
Gambar 1 dicerminkan -> Menjadi Horizontal
Gambar 1 dicerminkan -> Menjadi Vertikal
Thanks.
mas,, mw tanya,,
gimana caranya mendeteksi kemiringan image, merotasi image dengan sudut bebas,, asumsi gambar tidak tegak lurus,, dibuat jadi tegak lurus,,
*ingin implementasi utk citra hasil scan,, dibaca kemiringanny,, trus diluruskan
mohon bantuannya,, makasi
mas mw nanya soal citra huffman ne…gimana cara misah intensitas warnanya…RGBnya? kalo ga salah pertama harus dipisah dulu kan intensitas warnaya…setelah tu dikompres satu satu tiap intensitas warna tsb? mksh 🙂
mas peb saya mw nanya nih..
saya ada penggalan script stegano untuk penulisan saya..
bisa tolong dijelaskan maksut script ini..soalnya saya bingung..mohon bantuannya..
//sisip pesan
pesan:=memoTulisPesan.Lines.Text;
BinerPesan:=”;
PanjangText:=length(memoTulisPesan.Lines.Text);
for i:=1 to PanjangText do
begin
BinerPesan:=BinerPesan+biner(ord(pesan[i]));
end;
n:=1;
for j:=1 to ImageFile.Height-1 do
begin
for i:=0 to ImageFile.width-1 do
begin
inc(z);
merah:=GetRValue(getpixel(ImageFile.Canvas.Handle,i,j));
hijau:=GetGValue(getpixel(ImageFile.Canvas.Handle,i,j));
biru:=GetGValue(getpixel(ImageFile.Canvas.Handle,i,j));
BinerMerah:=biner(merah);
BinerHijau:=biner(hijau);
BinerBiru:=biner(biru);
delete(BinerMerah,8,1);
delete(BinerHijau,8,1);
delete(BinerBiru,8,1);
BinerBiru:=BinerBiru+BinerPesan[n];
BinerHijau:=BinerHijau+BinerPesan[n+1];
BinerMerah:=BinerMerah+BinerPesan[n+2];
n:=n+3;
MerahBaru:=decimal(BinerMerah);
HijauBaru:=decimal(BinerHijau);
BiruBaru:=decimal(BinerBiru);
setpixelV(hdc1,i,j,RGB(MerahBaru,HijauBaru,BiruBaru));
if n>length(BinerPesan) then
break;
end;
if n>length(BinerPesan) then
break;
end;
salam kenal, mas peb
salam kenal, mas peb saya mau tnya? saya sudah membuat aplikasi kompresi citra dengan delphi menggunakan metode singular value decomposition dari beberapa literatur yang saya baca seharusnya image hasil kompresi jauh lebih kecil ukurannya dibanding dgn citra asli nah yang saya bingung kok hasil yang saya buat justru lebih besar ukuran filenya. saya sudah cek teori SVDnya sudah benar. menurut mas peb gmn?terima kasih sebelumnya.
Salam kenal mas. Saya masih newbie, mau tanya cara mengubah matriks ke bentuk gambar gimana ya?
ass…salam kenal..aku lagi nyelesain skripsi mas..
mau tanya gmn y caranya scanning RGB dari webcam..aku uda pake DSPACK mas..
jadi stelah di proses yang tampil cm obyek dengan RGB yang di setting…
kalo bs minta listing programnya mas,,,masih newbie mas mslahnya,,,
thanks mas..sukses selalu…
saya ada masalah dikit dengan masalah pemograman di vb
Private Sub Invert_Click()
Dim r, g, b, PixLong As Long
‘ frmPicture.StatusBar1.Panels(1).Text = “Please Wait…”
‘ frmPicture.StatusBar1.Panels(1).AutoSize = sbrSpring
For i = 0 To frmPicture.imgload.ScaleHeight – 1
For J = 0 To frmPicture.imgload.ScaleWidth – 1
PixLong = GetPixel(frmPicture.imgload.HDC, J, i)
RGBcolors = GetRGB(PixLong)
r = 255 – RGBcolors.red
g = 255 – RGBcolors.green
b = 255 – RGBcolors.blue
SetPixel frmPicture.imgload.HDC, J, i, RGB(r, g, b)
Next J
frmPicture.imgload.Refresh
DoEvents
Next i
‘frmPicture.StatusBar1.Panels(1).Text = “”
frmPicture.Pictemp.Picture = frmPicture.imgload.Image
frmPicture.Pictemp.Refresh
End Sub
pada saat saya lakukan prose bermasalah dengan ” GetRGB” pesan yang muncul FUNCTION NOT DEFINED
TOLONG PENCERAHANYA..?
gan ane ne pemula di delphi,tolong dong ksh tw program delphi yang bs bc bit pada kata ato file
bang kira2 ini maksudx apa ya?
var
x, y, w, h, k, l: integer;
PC, PH: PByteArray;
Ki, Ri, Gi, Bi, Ko, Ro, Go, Bo: array of array of byte;
jumlah: real;
begin
Randomize;
w := FormCitra.Image.Picture.Width;
h := FormCitra.Image.Picture.Height;
if (FormCitra.Image.Picture.Bitmap.PixelFormat = pf8bit)
then
begin
SetLength(Ki, w, h);
SetLength(Ko, w, h);
for y := 0 to h-1 do
begin
PC := FormCitra.Image.Picture.Bitmap.ScanLine[y];
PH := FormHasil.Image.Picture.Bitmap.ScanLine[y];
for x := 0 to w-1 do
begin
Ki[x, y] := PC[x];
Ko[x, y] := PH[x];
end;
end;
for x := M to w-M-1 do
for y := N to h-N-1 do
begin
jumlah := 0;
for k := -M to M do
for l := -N to N do
jumlah := jumlah+Ki[x-k,y-l]*Mask[k,l];
if (Round(jumlah) 255) then
Ko[x,y] := 255
else
Ko[x,y] := Round(jumlah);
end;
for y := 0 to h-1 do
begin
PH := FormHasil.Image.Picture.Bitmap.ScanLine[y];
for x := 0 to w-1 do
PH[x] := Ko[x, y];
end;
Ki := nil;
Ko := nil;
end;
masi pemula bang trus itu fungsinya buat apa?
terima kasih
mas sya lagi ada tugas kuliah tentang steganografi pada citra jpg.
kata dosen saya citra jpeg itu didecoding dulu sampai ketemu komponen dctna..
mohon bimbingan dari mas agus kerena saya sangat tidak mengerti cara mencari omponen itu.
pagi, maaf mau numpang nanya kalo misal kita punya file gambar/foto (apapun formatnya) yang memiliki kapasitas 10mb, nah yang mau saya tahu bagaimana caranya kita mendapatkan/menghitung pixelnya kemudian dari pixel tersebut terdapar RGBnya/byte kemudian lagi berapa nilai bitnya, sedangkan kita mau cari adalah nilai bit dalam bentuk binernya…mohon teori atau pencerahannya…terima kasih.
cara menampilkan bilingan 0-255 pada citra digital degan delphi.. tolong ya!! Kallon
Thanks b4
Mau nanya mas, Gimana menampilkan image dengan nilai pikselnya real,misalkan : 2.3, 2.8 dst. jadi bukan nilai dari 0-255.
kalau nilainya real bisa dinormalisasi dari min..max ke rentang intensitas 0..255 (dibulatkan)
bagi ilmu dong mas, metode canny pake delphi….dan nampilin koordinatnya
trims.
Gan mau Tanya saya kan membuat Program Citra Digital tetapi memaki RGB emang kalo cuma memakai RGB tanpa mengubah ke grayscale bisa ya gan? trm ksh
bisa, kalau nilai R, G, dan B-nya sama maka ekivalen dengan grayscale
gan, cara ngambil piksel wrna htm gmna ya? ada tgs delphi disuruh hitung jumlah karakter pd gambar.. jd gambar bitmap yg berupa huruf…
berdasarkn piksel gmbr nnti dia bs ngebaca jumlah karakter yg ada pd gambar.. sy ga ngerti soal delphi.. tlg bantuanx gan..
maaf feb, mau nanya yang dimaksud citra,canvas.pixel dalam pengolahan citra apa ya? mohon kasih contoh, terima kasih banyak ya..
lebih jelasnya mohon diberi contoh dan keterangan dari rumus dibawah ini.
terutama maksud penulisan GetRValue(Citra,Canvas.Pixel[j,i], sebelumnya terima kasih banyak, kebetulan ini adalah salah satu tugas kuliah saya..
maaf mas mau tanya.. kalau untuk ke format 2bit itu gimana? kan adanya ada pf24bit,pf8bit,pf4bit
setahu saya, 2 bit itu nggak ada adanya pf1bit http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Graphics_TPixelFormat.html
trus kalau mau bikin gambar grayscale nya jd 2 bit gmn ya mas codingnya?? sya msh bingug…
mas .. saya mau nanya cara pengoperasian atau prncocokan jarak hitung euclidean dengan stringgrid itu gimana ya? jadi seumpama pixel pertama stringrid1 dengan dikurang pixel pertama stringgrid2 ..mohin banyuannya
assalamualaikum
saya mau nanya bagaimana caranya citra grayscaledi kuantisasi menjadi 8 level/ variasi ?
mohon bantuannya, terima kasih
mas mau tanya, kalo di delphi syntax buat mengetahui posisi pixel gimana ya.. misal ketika kita klik gambar, akan memunculkan lokasi pixel dimana kita meng klik, mohon bantuannya terimakasih.
Selamat malam pak,saya ingin bertanya pak tentang pengolahan citra menggunakan delphi. yang mau saya tanyakan bagaimana menampilkan ukuran pixel menggunakan metode scanline dan menampilkan image menggunakan delphi pak,tapi data yang saya gunakan bertype FITS File Pak.
Terima kasih sebelumnya Pak.