资源简介
这是一个用pHash算法实现的图像搜索实例,供大家相互学习参考。
代码片段和文件信息
package cn.edu.jxau.image;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
/**
* 图像的放大与缩小
* @author xiaoxu
*
*/
public class AmplificatingShrinking {
/**
* 双线性插值法图像的放大
* @param srcPath
* @param distPath
* @param formatName
* @param k1
* @param k2
*/
public static void bilinearityInterpolation(String srcPath String distPath
String formatName float k1 float k2) {
BufferedImage img = ImageDigital.readImg(srcPath);
BufferedImage imgOut = bilinearityInterpolation(img k1 k2);
ImageDigital.writeImg(imgOut formatName distPath);
}
/**
* 双线性插值法图像的放大
*
* @param img
* 要缩小的图像对象
* @param k1
* 要缩小的列比列
* @param k2
* 要缩小的行比列
* @return 返回处理后的图像对象
*/
public static BufferedImage bilinearityInterpolation(BufferedImage img float k1 float k2) {
if (k1 < 1 || k2 < 1) {// 如果k1 <1 || k2<1则是图片缩小,不是放大
System.err
.println(“this is shrink image funcation please set k1<=1 and k2<=1!“);
return null;
}
float ii = 1 / k1; // 采样的行间距
float jj = (1 / k2); // 采样的列间距
int dd = (int) (ii * jj);
// int m=0 n=0;
int imgType = img.getType();
int w = img.getWidth(); // 原图片的宽
int h = img.getHeight(); // 原图片的宽
int m = Math.round(k1 * w); // 放大后图片的宽
int n = Math.round(k2 * h); // 放大后图片的宽
int[] pix = new int[w * h];
pix = img.getRGB(0 0 w h pix 0 w);
/*
* System.out.println(w + “ * “ + h); System.out.println(m + “ * “ + n);
*/
int[] newpix = new int[m * n];
for (int j = 0; j < h - 1; j++) {
for (int i = 0; i < w - 1; i++) {
int x0 = Math.round(i * k1);
int y0 = Math.round(j * k2);
int x1 y1;
if (i == w - 2) {
x1 = m - 1;
} else {
x1 = Math.round((i + 1) * k1);
}
if (j == h - 2) {
y1 = n - 1;
} else {
y1 = Math.round((j + 1) * k2);
}
int d1 = x1 - x0;
int d2 = y1 - y0;
if (0 == newpix[y0 * m + x0]) {
newpix[y0 * m + x0] = pix[j * w + i];
}
if (0 == newpix[y0 * m + x1]) {
if (i == w - 2) {
newpix[y0 * m + x1] = pix[j * w + w - 1];
} else {
newpix[y0 * m + x1] = pix[j * w + i + 1];
}
}
if (0 == newpix[y1 * m + x0]) {
if (j == h - 2) {
newpix[y1 * m + x0] = pix[(h - 1) * w + i];
} else {
newpix[y1 * m + x0] = pix[(j + 1) * w + i];
}
}
if (0 == newpix[y1 * m + x1]) {
if (i == w - 2 && j == h - 2) {
newpix[y1 * m + x1] = pix[(h - 1) * w + w - 1];
} else {
newpix[y1 * m + x1] = pix[(j + 1) * w + i + 1];
}
}
int r g b;
float c;
ColorModel cm = ColorModel.getRGBdefault();
for (int l = 0; l < d2; l++) {
for (int k = 0; k < d1; k++) {
if (0 == l) {
// f(x0) = f(00) + c1*(f(10)-f(00))
if (j < h - 1 && newpix[y0 * m + x0 + k] == 0) {
c = (float) k / d1;
r
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 301 2012-11-24 23:35 ImageSearch\.classpath
文件 387 2012-11-24 23:35 ImageSearch\.project
文件 629 2012-11-24 23:35 ImageSearch\.settings\org.eclipse.jdt.core.prefs
文件 7364 2012-11-24 23:36 ImageSearch\bin\cn\edu\jxau\image\AmplificatingShrinking.class
文件 4047 2012-11-24 23:41 ImageSearch\bin\cn\edu\jxau\image\Fingerprint.class
文件 4822 2012-11-24 23:54 ImageSearch\bin\cn\edu\jxau\image\ImageDigital.class
文件 3127 2012-11-24 23:35 ImageSearch\bin\cn\edu\jxau\image\Transformation.class
文件 69007 2012-11-24 23:37 ImageSearch\bin\image\person.jpg
文件 2143 2012-11-24 23:37 ImageSearch\bin\image\person1.jpg
文件 7959 2012-11-24 23:37 ImageSearch\bin\image\person10.jpg
文件 2034 2012-11-24 23:37 ImageSearch\bin\image\person11.jpg
文件 5181 2012-11-24 23:37 ImageSearch\bin\image\person2.jpg
文件 1847 2012-11-24 23:37 ImageSearch\bin\image\person3.jpg
文件 1143 2012-11-24 23:37 ImageSearch\bin\image\person4.jpg
文件 4354 2012-11-24 23:37 ImageSearch\bin\image\person5.jpg
文件 6735 2012-11-24 23:37 ImageSearch\bin\image\person6.jpg
文件 7442 2012-11-24 23:37 ImageSearch\bin\image\person7.jpg
文件 1872 2012-11-24 23:37 ImageSearch\bin\image\person8.jpg
文件 1191 2012-11-24 23:37 ImageSearch\bin\image\person9.jpg
文件 12960 2012-11-24 23:36 ImageSearch\src\cn\edu\jxau\image\AmplificatingShrinking.java
文件 4736 2012-11-24 23:41 ImageSearch\src\cn\edu\jxau\image\Fingerprint.java
文件 8590 2012-11-24 23:54 ImageSearch\src\cn\edu\jxau\image\ImageDigital.java
文件 3310 2012-11-23 23:37 ImageSearch\src\cn\edu\jxau\image\Transformation.java
文件 69007 2012-11-24 23:37 ImageSearch\src\image\person.jpg
文件 2143 2012-11-24 23:37 ImageSearch\src\image\person1.jpg
文件 7959 2012-11-24 23:37 ImageSearch\src\image\person10.jpg
文件 2034 2012-11-24 23:37 ImageSearch\src\image\person11.jpg
文件 5181 2012-11-24 23:37 ImageSearch\src\image\person2.jpg
文件 1847 2012-11-24 23:37 ImageSearch\src\image\person3.jpg
文件 1143 2012-11-24 23:37 ImageSearch\src\image\person4.jpg
............此处省略22个文件信息
- 上一篇:geoserver跨越war包
- 下一篇:javaee中文api
评论
共有 条评论