Noktaların Koordinat Kayıtları

Yapmak istediğiniz işle ilgili doğru bileşeni bulmak için burayı kullanabilirsiniz. Sadece bulmak için, diğer sorular Programlama forumuna lütfen.
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Cevapla
izmirlikemal
Üye
Mesajlar: 155
Kayıt: 10 Oca 2014 01:08
Konum: izmir/Buca

Noktaların Koordinat Kayıtları

Mesaj gönderen izmirlikemal »

Merhaba Dostlarım ...!
Özür dilerim resmin kayıt adresini vermeyi unuttuğum için aynı soruyu sormuş gibi oluyorum. İlk soru mesajımı dikkate almayınız.

Resminin bir bölümünün kayıt adresini verdiğim (http://s8.postimg.org/8d6n369it/internetresmi_1.png) ve Corel Draw ile çizdiğim yaklaşık 1000(bin)
adet noktayı Corel Draw da RGB modunda ve herbirini de 1 pixel çapında çizdiğim bu resmi
Delphi 2006 da taratıp noktaların bulunduğu yerlerin koordinatlarını veritabanına kayıt ediyorum.
Ancak kayıtları tetkik ettiğimde 1 pixel boyutundaki noktalar veritabanında 1 den fazla koordinat(x,y)
ile temsil ediliyor.
Örneğin noktalardan herhangi birisini ele alalım;

Veritabanına
Apsis Ordinat
----- ------
125 523
126 522
127 524
128 525

şeklinde 4 nokta olarak kayıt yapıyor.

Burada benim sorunum;

Veritabanına atıyorum şimdi

Apsis Ordinat
----- ------
127 524

şeklinde kayıt yapsın.

Yani her biri 1 pixel çapındaki bu noktalardan her birinin koordinatlarını tek bir (x,y) ile temsil edilmesini
istiyorum.

Bu konuda bana yardım edecek arkadaşların bilgi ve tecrübesine ihtiyacım var. Yardımlarınız için Teşekkür ederim.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Noktaların Koordinat Kayıtları

Mesaj gönderen mrmarman »

Cevap standartlaştırma.
- Yani veritabanındaki noktasal ifadeler X / Y değil satır sütun gibi daha kesin ifadeler ile yer değiştirmeli.

- Kendi projeniz içinde 1/4 oranında (fiziksel (1) nokta (n) adet pixel oluyorsa çıkıyorsa 1/n) küçültün. Sonra da işleminizi öyle yapın. Nasıl olacak ? örneğin

01,02,03,04 için 1 nolu sütun
05,06,07,08 için 2 nolu sütun
09,10,11,12 için 3 nolu sütun
13,14,15,16 için 4 nolu sütun
..
..

Rakamların nasıl örüntülendiğini anlayabildik.
Şimdi dilerseniz bunların merkezindeki bir tanesini siyah mı beyaz mı diye değerlendirebilirsiniz veya kaçta kaçı siyah veya beyaz olarak sorgular kararı öyle verirsiniz.
Resim
Resim ....Resim
izmirlikemal
Üye
Mesajlar: 155
Kayıt: 10 Oca 2014 01:08
Konum: izmir/Buca

Re: Noktaların Koordinat Kayıtları

Mesaj gönderen izmirlikemal »

Değerli Arkadaşım Muharrem Bey

Sizin önerinizi ben şöyle anladım. Yanlışım varsa düzeltiniz.
Corel de çizdiğim Noktaları(1 pixel çaplı) Corel Draw da 1/4 oranında küçülttüm. Sonra bmp uzantılı olarak kayıt ettim.
Delphi de tarattım, aşağıdaki sonuçları elde ettim (Deneme amacıyla 5 nokta oluşturdum).

Veritabanı kayıtları aşağıdaki gibi oluştu.

1. nokta koordinatları:
x y
--- ---
890 211
890 212
891 212
2. nokta koordinatları:
274 223
275 223
275 224
3. nokta koordinatları:
570 353
4. nokta koordinatları:
154 535
155 535
154 536
5. nokta koordinatları:
951 551
950 551
951 552
Yukarda 3. nokta tek (x,y) korrdinatı ile temsil edilirken, diğer noktalar 3 adet (x,y) koordinatıyla
temsil ediliyor. Yinede aralarında bir (3 koordinatın x veya y leri arasında) bir bağlantı oluşturmaya çalıştım.
Belki bu şekilde çözerim diye ama saçma sapan değişim gösteriyorlar.
Benim ilk yazımda da bahsettiğim gibi söz konusu (örneğin 5 nokta) noktaları 3. nokta koordinatları başlığında olduğu gibi
tek bir P(x,y) koordinat takımıyla temsil edilmesini istiyorum.

Yazdıklarım yanlış ise bana daha açıklayıcı bilgi verirseniz. memnun olacağım. Zahmetiniz için teşekkürlerimi sunarım.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Noktaların Koordinat Kayıtları

Mesaj gönderen mrmarman »

Metod anlattığım gibi ancak yanlış anlaşılan kısım 1/4 oranında küçültme işini ürün üzerinden yani Delphi yakasında olması gerekiyordu.
Çünkü Corel tarafında ürün oluşurken (vektörel olsa da ürün vektör olmadığından sıkıştırma kaynaklı vb. sebeplerle) mozaiklenme olabilmektedir.

Şöyle düşünün örneğin 100 width genişliğinde bir resim ürünün her 4 noktasını 1 nokta olarak değerlendirmeye aldığınızda 100/4 = 25 sütunluk bir satır elde edeceksiniz. Bu da 1/4 oranında küçülme ve noktaların birleşmesiyle standartlaşma şeklinde ifade ettiğim hücreleri oluşturacaktır.
Resim
Resim ....Resim
izmirlikemal
Üye
Mesajlar: 155
Kayıt: 10 Oca 2014 01:08
Konum: izmir/Buca

Re: Noktaların Koordinat Kayıtları

Mesaj gönderen izmirlikemal »

Muharrem Bey inanın son mesajınızdan(2. paragraf) bir şey anlamadım dersem, kızmayın bana. Lütfen biraz daha konuyu açarmısınız.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Noktaların Koordinat Kayıtları

Mesaj gönderen mrmarman »

Rica ederim, daha önce de benzer örnekleri konuşmuştuk yanlış hatırlamıyorsam ama buyrun...
Resim

Proje download linki : buradan indirip inceleyebilirsin.

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
  function Hucre( aCanvas:TCanvas; xOff, yOff, iHucrePix: Integer ): Boolean;
  Var
    i, j : Integer;
    iToplamBlack : Integer;
  begin
    iToplamBlack := 0;
    for i := xOff to xOff + iHucrePix do
     for j := yOff to yOff + iHucrePix do begin
       if aCanvas.Pixels[i, j] <> clWhite then Inc(iToplamBlack);
     end;
    Result := iToplamBlack >= ((iHucrePix * iHucrePix) div 4); 
    aCanvas.Brush.Style := bsClear;
    aCanvas.Pen.Color   := clBlack;
    aCanvas.Pen.Width   := 1;
    aCanvas.Rectangle( xOff, yOff, xOff + iHucrePix, yOff + iHucrePix );
  end;
Const
  iHucrePix = 20;
Var
  Bitmap : TBitmap;
  i, j : Integer;
  sut, sat : Integer;
begin
  Bitmap := TBitmap.Create;
  Bitmap.Assign( Image1.Picture.Graphic );

  stringGrid1.RowCount := (Bitmap.Height div iHucrePix) + 1;
  stringGrid1.ColCount := (Bitmap.Width  div iHucrePix) + 1;
  StringGrid1.DefaultColWidth  := 8;
  StringGrid1.DefaultRowHeight := 8;
  j   := 0;
  sat := 1;
  while j <= Bitmap.Height do begin
    i   := 0;
    sut := 1;
    while i <= Bitmap.Width do begin
      if Hucre( Bitmap.Canvas, i, j, iHucrePix ) then
      begin
        StringGrid1.Cells[sut, sat] := 'x';
      end;
      inc(i, iHucrePix);
      inc(sut);
    end;
    inc(j, iHucrePix);
    inc(sat);
  end;
  Image1.Picture.Bitmap.Assign(Bitmap);
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  with TStringGrid(Sender) do begin
    if Cells[aCol, aRow] = 'x' then
    begin
      Canvas.Brush.Color := clRed;
      Canvas.FillRect( Rect );
    end;

  end;
end;
Resim
Resim ....Resim
izmirlikemal
Üye
Mesajlar: 155
Kayıt: 10 Oca 2014 01:08
Konum: izmir/Buca

Re: Noktaların Koordinat Kayıtları

Mesaj gönderen izmirlikemal »

Muharrem Bey inceleyip sizi sonuç hakkında buradan bilgilendireceğim. Teşekkürler ve de iyi geceler.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Noktaların Koordinat Kayıtları

Mesaj gönderen mrmarman »

Buradaki örnek 20 pixel kare seviyesini tek kareye düşürüyor. Yani 1/20 küçültme yapıyor.

Sizin incelemek durumunda olduğunuz nokta ağırlıklı olarak kaynak noktaların belli karelere denk gelecek şekilde olup olmayacağı hususdur.

Başarılar.
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Noktaların Koordinat Kayıtları

Mesaj gönderen mrmarman »

Bir de eğer noktalar belirli bir ölçümleme sonucu elde edilen grafik ise ki burada öyle bir dağılım ve örüntüsüzlük algıladım.

- Bu durumda her noktanın merkez noktasını referans kabul ederek veritabanı kaydı tutabilirsiniz.

- Nasıl olacak ? Kareler şeklinde standart hücreler değil de soldan sağa yukarıdan aşağıya tarama yapılarak en az 1 noktaya isabet edildiği başlangıç offsetleri be noktanın sona erdiği bitiş offsetlerinin farkları sizin merkez offset değerini verecektir.

- O zaman bu nokta 20 kare pixel çapında ise nokta sol üst offsetinden başlayan +10,+10 offsetlik nokta merkez koordinatıdır diyebileceksiniz.
Resim
Resim ....Resim
Cevapla