我目前正在开展一个项目,要求我阅读并放大图像。
我目前正在使用最近邻算法来放大我的图像,但我试图使用双线性插值并发现难以实现。
以下是我目前的NN算法:
public void doThumbnailResize() {
resizedImage = new BufferedImage(55, 55, BufferedImage.TYPE_3BYTE_BGR);
int h = resizedImage.getHeight(), h2 = image1.getHeight();
int w = resizedImage.getWidth(), w2 = image1.getWidth();
for (int j = 0; j < h; j++) {
for (int i = 0; i < w; i++) {
float y = j * ((float) h2 / (float) h);
float x = i * ((float) w2 / (float) w);
resizedImage.setRGB(i, j, image1.getRGB((int) x, (int) y));
}
}
image_icon.setIcon(new ImageIcon(resizedImage));
}
我发现很难在网上找到资料,并且想知道是否有人能指出我正确的方向,也许还有一些伪代码。
提前致谢。
答案 0 :(得分:0)
双线性插值基本上用于插值4像素的正方形。您首先要查找最近的邻居,即目标像素映射到哪个源像素,以及相对于该像素的位置。然后创建一个目标像素大小宽和高的框,并检查该框与哪些像素相交(最多为4)并计算该重叠与框大小的关系。然后将该百分比应用于颜色并添加到最终颜色。
示例:
假设我们有一个像这样的9x9图像(每个字符表示一个像素):
ABC
DEF
GHI
现在我们要将其放大到4x4并计算第一个像素(0/0)的插值:
现在换第二个像素(1/0):
让我们考虑另一个像素,这次(1/1):