Soru sorImprofile
canan tarafından 3 yıl önce soruldu

Merhabalar
 
Elimde bir goruntu var. 
Yatay yön boyunca birden çok çizginin yoğunluk profillerini bulmak istiyorum. 
Tek bir yatay çizginin her bir pixelinin yoğunluğunu gösteren bir profil çiziyorum.
Bir satır için başarıyorum.
Ek olarak, belirli aralıklarla birden fazla yatay çizgi için tekrarlamak ve profillerini almak istiyorum. 
Daha sonra elde ettigim bu profillerin 3d görüntüsünü çizdirmek istiyorum.
 
Bana yardım edebilecek kimse var mı? teşekkür ederim..
 
 

7 Cevap
En iyi cevap
Özgür Yönetici tarafından 3 yıl önce cevaplandı
i = imread('deneme.png');
imshow (i)

axis on
x1 =10;
y1 = 400;
x2 = 350;
y2 = 400;

hold on
plot([x1,x2], [y1,y2], 'r+-', 'LineWidth', 2);
[xi, yi, theProfile] = improfile(i, [x1,x2], [y1,y2]);
figure
plot(theProfile, 'b-');
grid on;
figure

plot3(x1:x2, ones(size(theProfile))*y1,theProfile)
grid on;

plot3 fonksiyonunu kullanırken x,y,z elemanları eşit olmalıdır. x elemanınız 341 elemanlı bir vektör ve z elemanınızda buna bağlı olarak belirlenen 341 elemanlı (theProfile) vektör, y vektörünü de 341 tane elemandan oluşan 400 değerleridir. Bu şekilde istediğiniz pixel değerlerini kullanarak 3d plot yapacağınız bir algoritma yazabilirsiniz. Yine anlamadığınız bir yer olursa yardımı olabilirim.

Özgür Yönetici tarafından 3 yıl önce cevaplandı

Merhaba,
Yoğunluk profillerinden kastettiğiniz tam olarak nedir? Tek bir yatay çizginin her bir pixelinin yoğunluğunu bulduğunuz kodları ve örnek image paylaşabilirseniz yardımcı olmaya çalışabilirim.

canan tarafından 3 yıl önce cevaplandı

i = imread('deneme.tif');
imshow (i)

axis on
x1 =10;
y1 = 400;
x2 = 350;
y2 = 400;

hold on
plot([x1,x2], [y1,y2], 'r+-', 'LineWidth', 2);
[xi, yi, theProfile] = improfile(i, [x1,x2], [y1,y2]);
figure
plot(theProfile, 'b-');
grid on;
 
 
cok tesekkur ederim cevabiniz icin.
belirli bir satirin pixel degerini aliyor ve grafik olarak cizdiriyor. ben kendim belirleyebilecegim satirlarda da ayni islemi yapmak ve bu coklu grafikleri 3d olarak tek bir grafikte gostermek istiyorum.
 
 

canan tarafından 3 yıl önce cevaplandı

Cok tesekkur ederim ama sanirim tek bir satir icin ( ki biliyorum o satiri ben belirledim) pixel egrisini 3 boyutlu grafik olarak verdi.
 
ben belirleyebilecegim farkli y degerlerinde (satirlar) de bu pixel cizgilerini elde etmek istiyorum. ve her bir satira karsilik gelen cizgileri ayni grafik uzerinde gostermek istiyorum

Özgür Yönetici tarafından 3 yıl önce cevaplandı

Evet o kısmı benim paylaştığım örnek koddan yapabileceğinizi düşündüm, for döngüsü içerisinde y değişkeninizi 0 dan başlayıp artırarak improfile fonksiyonunu çağıracaksınız, hesaplanan theProfile değerine göre artan her y değeri için plot3 fonksiyonunu çağırarak aynı figure ekranına çizdireceksiniz. Kısaca şöyle düşünebilirsiniz, her bir y değeri için döngünün içinde improfile ve plot3 fonksiyonlarını çağırarak sıra sıra y değerlerini tek bir figure ekranında çizdireceksiniz.

Özgür Yönetici tarafından 3 yıl önce cevaplandı
close all
i = imread('deneme.png');
imshow (i)
x = [10 350 10 350 10 350]; %x1 x2 sınır(10-350)
y = [400 400 399 399 398 398];%y1 y2 sınır(400...0)
improfile(I,x,y),grid on;

Bu şekilde daha kolay 3d çizdirebilirsiniz. Fakat burda da x ve y vektörlerini parametrik olarak oluşturma konusunda problem yaşayabilirsiniz. y vektörünü 400'den 0' a kadar tek tek manuel olarak girmeniz mantıklı olmaz. Eğer bu konuda problem yaşarsanız yardımcı olmaya çalışırım.
Mathworks İmprofile

canan tarafından 3 yıl önce cevaplandı

cok tesekkur ediyorum anliyorum ancakben de for dongusunu kuramadim.
esas sorum aslinda for dongusunu nasil yazacagimdi.