Sadece görüntüyü BiCubic enterpolasyonu ile düzeltmeye çalışıyorum. RGB görüntüsünü enterpole etmek için kullanılan bazı kodlarım var. Gri Tonlamalı görüntü için çalışmak için kodu değiştirdim. Ama sonuçta sadece tamamen siyah görüntü aldım. Göz önünde bulundurulan giriş ve çıkış görüntü boyutu aynıdır. Kod aşağıya yapıştırılmıştır. Lütfen bana yardım et. Şimdiden teşekkürler.C++ Bicubic yöntemi ile görüntü enterpolasyonu
inline Uint16 saturate(float x, unsigned max_pixel)
{
return x > max_pixel ? max_pixel
: x < 0.0f ? 0
: Uint16(x);
}
inline float get_subpixel(const Uint16* in, std::size_t dest_width, std::size_t dest_height, unsigned x, unsigned y)
{
if (x < dest_width && y < dest_height)
return in[(y * dest_width) + x];
return 0;
}
void interpolate(unsigned dest_width, unsigned dest_height, unsigned bits_allocated, const Uint16* src, Uint16** dest)
{
const double tx = 1;
const double ty = 1;
float C[5] = { 0 };
unsigned max_bit = pow(2, bits_allocated);
for (unsigned i = 0; i < dest_height; ++i)
{
for (unsigned j = 0; j < dest_width; ++j)
{
const float x = float(tx * j);
const float y = float(ty * i);
const float dx = tx * j - x, dx2 = dx * dx, dx3 = dx2 * dx;
const float dy = ty * i - y, dy2 = dy * dy, dy3 = dy2 * dy;
for (int jj = 0; jj < 4; ++jj)
{
const int idx = y - 1 + jj;
float a0 = get_subpixel(src, dest_width, dest_height, x, idx);
float d0 = get_subpixel(src, dest_width, dest_height, x - 1, idx) - a0;
float d2 = get_subpixel(src, dest_width, dest_height, x + 1, idx) - a0;
float d3 = get_subpixel(src, dest_width, dest_height, x + 2, idx) - a0;
float a1 = -(1.0f/3.0f) * d0 + d2 - (1.0f/6.0f) * d3;
float a2 = 0.5f * d0 + 0.5f * d2;
float a3 = -(1.0f/6.0f) * d0 - 0.5f * d2 + (1.0f/6.0f) * d3;
C[jj] = a0 + a1 * dx + a2 * dx2 + a3 * dx3;
d0 = C[0] - C[1];
d2 = C[2] - C[1];
d3 = C[3] - C[1];
a0 = C[1];
a1 = -(1.0f/3.0f) * d0 + d2 - (1.0f/6.0f) * d3;
a2 = 0.5f * d0 + 0.5f * d2;
a3 = -(1.0f/6.0f) * d0 - 0.5f * d2 + (1.0f/6.0f) * d3;
(*dest)[i * dest_width + j] = saturate(a0 + a1 * dy + a2 * dy2 + a3 * dy3, max_bit);
}
}
}
}
get_subpixel-calls sırasında herhangi bir sınırsız erişim durumu var mı? Bağlandığınız zaman 0 (siyah) olacaktır. Bir hata ayıklayıcısı size burada yardımcı olabilir. Sadece ilk fikrim. – KimKulling
Cevabınız için teşekkür ederiz ... sınırlandırılmış erişimin bir kısmı var ama tüm aramalar için değil –
Sonuç piksel değerlerini kontrol ettim. Bunlar çoğunlukla 100 değerinin altındadır. –