Merhaba görüntü işeme üzerine çalışıyorum matlab de zigzag okuma yaparak bir görüntüyü tek boyutlu hale getirdim bu tek boyutlu diziyi bloklara ayırmak istiyorum daha sonra XOR işlemi yapacağım için tek satırda bloklara ayırmam gerekiyor bunun için reshape ve mat2cell komutlarını denedim istediğim sonuca ulaşamadım yardımcı olur musunuz?
Merhaba,
Herhangi bir hata mı aldınız? reshape veya mat2cell kullandığınızda ne sorun yaşadınız?
Hayır hata almadım sadece görüntüyü 8*8 lik bloklara böldüm ama ben bunu zigzag işlemi yaptıktan sonra zigzaga göre yapsın istiyorum reshape kullandığımda tek boyutlu diziye göre değil direkt görüntüye göre bloklara ayırdı.
Şimdi şöyle; bahsettiğiniz zigzag okuma, XOR işlemi v.s tam olarak nedir açıkçası bilmiyorum. Ancak anladığım kadarı ile bir vektörü belirli uzunlardaki alt matris birimlerine ayırmak istiyorsunuz. Bunu hangi ayırma/bölme kuralına göre yapacağınızı söylerseniz size daha iyi yardımcı olabilirim. Yani zigzag şeklinde karelere bölmek istiyorsanız buna uygun bir döngü ile sınıflandırma yapabileceğimizi düşünüyorum.
Sağlam Kriptografik Temel Öğelerin Kaotik Seçimine Dayalı Bir Görüntü Şifreleme Algoritması üzerine çalışıyorum amacım matlab de görüntü şifleme, bunu yaparken de algoritma adımlarına göre ilerliyorum görüntüyü ZigZag şeklinde okuyup columns haline getiriyorum bu columns larıda kendi içerisinde bloklara ayırmak istiyorum bunun için ne kullanmam gerekiyor bilmiyorum.
Anlıyorum, peki bu columnları nasıl bir mantığa göre ayırmak istiyorsunuz? Kaça kaçlık bir vektörünüzü kaça kaçlık alt bloklara ayırmak istiyorsunuz? Genel olarak bir vektörü matris alt birimlerine ayırmak için reshape fonksiyonu yeterli olabilir ancak sizin probleminiz için kullanımdaki sorun nedir tam olarak anlayamadım.
Yapmaya çalıştığınız şeyi daha iyi anlayabilsem çok kolay yapabileceğimizi düşünüyorum. Ekran görüntüsü v.b. paylaşır mısınız?
Üzgünüm, sizi anlamaya çalışıyorum ama gerçekten anlayamıyorum. 1×65536'lık vektörü ne şekilde gruplamak istiyorsunuz?? 8×8'lik matrislere mi bölmek istiyorsunuz? reshape kullandığımda tek boyutlu diziye göre değil direkt görüntüye göre bloklara ayırdı demişsiniz. reshape'i kullanırken z matrisinizi kullandığınıza emin misiniz? Lütfen daha açık yazar mısınız?
Reshape kullanırken z matrisini nasıl kullanabilirim hani şu şekilde yaptığımda block_number = reshape(im,1,16,[])
1×65536’lık vektörüne göre bloklara ayırıyor z matrisine göre bunu nasıl ayırabilirim.
Merhaba,
Son sorduğunuzdan hareketle, reshape yaparken z matrisini kullanamamanızın sebebi nedir? Kast ettiğim:
block_number = reshape(z,1,16,[])
yazdığınızda nasıl bir sorun oluşuyor?
Ayrıca üstteki bir iletinizde "reshape kullandığımda tek boyutlu diziye göre değil direkt görüntüye göre bloklara ayırdı" yazmışsınız. Bu bloklara ayırmayı yaparken tek boyutlu dizi üzerinde reshape'i neden kullanmıyorsunuz? Size daha iyi yardımcı olabilmemiz için, aşağıdaki gibi bir sözde-kod (pseudo code) yazar mısınız?
im=imread('asil.jpg') %Asil resim, boyutu ... %Zigzag okuma, ciktisi zigzag_im, boyutu 1x65536 %Reshape komutu, beklenen boyut ...
im=imread('woman.jpg'); %asıl resim im = imresize(im,[256 256]); %resmin boyutu 256 veya katı olmalı im=rgb2gray(im); %gri seviye z=ZigZagscan(im) %ZigZag fonksiyonunu çağırma zigzag okuma gerçekleşti [M N]=size(im); im(M,N) block_number = reshape(im,1,16,[]) %Resmi 256 piksellik bloklara ayırma x = randi([0,255],1,256) % 256 adet değerleri 0 ve 255 arasında değişen başlangıç vektörü üretme for i=1:65536 cipheredImage = xor(x,block_number) %başlangıç vektörü ile 256 pikseli içeren blok XOR lanmalı end
Ben bu konuda çok acemiyim ilk kez çalışıyorum sabrınız için öncelikle teşekkür ederim.
Yapmak istediğim şey tek boyutlu görüntüyü 256 piksellik bloklara bölme ve başlangıç vektörü ile XOR lamak.Fakat yanlış giden birşeyler var anlayamıyorum.
block_number = reshape(im,1,16,[]) %Resmi 256 piksellik bloklara ayırma
satırında yaptığınız şey 256 piksellik bir blok temsil etmiyor. Burada 1×16'lık bloklara ayırma yapıyorsunuz. 256 piksellik bloklara ayırma için 16'yı 256 yapmalısınız. Ayrıca aşağısında yazdığınız for döngüsünde piksel piksel gezmek istiyorsunuz sanırım ama yapmanız gereken blok blok gezmek olmalı. Bunu da block_number ın boyutunun 3. elemanından çıkarabilirsiniz:
[~,~,block_length]=size(block_number);
Sonra da for döngüsünü aşağıdaki şekilde kurmanız gerekecek galiba:
for i=1:block_length
cipheredimage(:,:,i)=xor(x,block_number(:,:,i));
end