其实,这个算法老复杂了。
成都创新互联公司专注于康巴什企业网站建设,自适应网站建设,商城网站建设。康巴什网站建设公司,为康巴什等地区提供建站服务。全流程按需求定制开发,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务
最近像素插值算法是最简单的一种插值算法,当图片放大时,缺少的像素通过直接使用与之最接近的原有的像素的颜色生成,也就是说照搬旁边的像素。它是三种内插值方式中质量最差的一种,用该方法修改后的图像边缘有锯齿,但速度较快。
双线性插值算法是沿水平和垂直方向对周围像素取样,然后建立像素颜色总数的平均颜色值。这种算法极大地消除了锯齿现象,在计算速度与质量两个方面都居于三种方法中间地位。
双立方插值算法是在水平、垂直和对角线方向对像素取样,然后使用总颜色的加权平均值建立新像素,它是三者中运算速度最慢,但效果最佳的一种。
import java.util.*;
public class GPAApplication {
public static void main(String[] args) {
Random ran=new Random();
int sum=0,sum4=0, sum3=0, sum2=0,sum1=0,sum0=0;
int sumCre=0;
int sumAve=0;
int stuGrade[]=new int[10];
int stuCre[]=new int[]{0,1,2,3,4};
int a=0,b=0,c=0,d=0,e=0;
for(int i=0;i10;i++){
stuGrade[i]=ran.nextInt(100)+1;
if (stuGrade[i]100stuGrade[i]=85)
a++;
sum4+=stuCre[4]*stuGrade[i];
if (stuGrade[i]=84stuGrade[i]=75)
b++;
sum3+=stuCre[3]*stuGrade[i];
if (stuGrade[i]=74stuGrade[i]=60)
c++;
sum2+=stuCre[2]*stuGrade[i];
if (stuGrade[i]=59stuGrade[i]=45)
d++;
sum1+=stuCre[1]*stuGrade[i];
if (stuGrade[i]=44)
e++;
sum0+=stuCre[0]*stuGrade[i];
sum=sum4+sum3+sum2+sum1+sum0;
sumCre=4*a+3*b+2*c+1*d+0*e;
sumAve=sum/sumCre;
}
System.out.println("\n****成绩乘以学分的总和****");
System.out.println(sum);
System.out.println("\n****学分总和****");
System.out.println(sumCre);
System.out.println("\n****各学分数目****");
System.out.println(a+" "+b+" "+c+" "+d+" "+e);
System.out.println("\n****加权平均值****");
System.out.println(sumAve);
}
}
告诉你我还是做出来:但是我是随机取数。
interface Average{
public double average(String[] table);
}
class A implements Average{
public double average(String[] table) {
if(table==null||table.length==0) return 0.0;
int sum=0,count=0;
for(int i=0;itable.length;i++)
{
try{int temp=Integer.parseInt(table[i]);
sum+=temp;
count++;
}catch(NumberFormatException e){
System.out.println(table[i]+":字符串不能转换为整数,产生" +
e.getClass().getName()+"异常");}catch(Exception e){
e.printStackTrace();
}
}
System.out.println("table数组的平均值为:"+sum/count);
return sum/count;
}
}
class B implements Average{
public double average(String[] table) {
if(table==null||table.length==0) return 0.0;
int temp[]=new int[table.length];
int count=0,i=0,sum=0;
while(itable.length){
try{
temp[count]=Integer.parseInt(table[i]);
count++;
}catch(NumberFormatException e){
System.out.println(table[i]+":字符串不能转换为整数,产生" +
e.getClass().getName()+"异常");
}catch(Exception e){
e.printStackTrace();
}finally{
i++;
}
}
int table1[]=new int[count];
System.arraycopy(temp, 0, table1, 0, count);
java.util.Arrays.sort(table1);
for(int n=0;ntable1.length;n++){
System.out.print(table1[n]+" ");
}
System.out.println();
for( int j=1;jtable1.length-1;j++){
sum+=table1[j];
}
System.out.println("table数组的平均值为:"+sum/(table1.length-2));
return sum/(table1.length-2);
}
}
class t{
public static void main(String args[]){
A a=new A();
a.average(args);
//System.out.println(c.average(args));
B b=new B();
b.average(args);
//System.out.println(d.average(args));
}
}
看主程序:
void main(void)
{
while(1)
{
temp=filter(); //加权平均值滤波
printf("%d\n",temp);
TX_temp(); //未知,可能是串口发送
}
}
主要是这部分
char filter()
{
char i;
char value_buf[N];
int sum=0;
for(i=0;iN;i++) //这个for循环把table中的值赋给value_buf数组
{
value_buf[i]=table[i]; //其实就是 value_buf[4]={10,20,30,65};
delay(500); /不知为何要加延时,本人感觉/毫无意义浪费cpu
}
for(i=0;iN;i++) //关键部分 sum=10*1+20*2+30*3+40*4
sum+=value_buf[i]*mul[i];
return (char)(sum/sum_mul); //返回(10*1+20*2+30*3+40*4)/sum_mul,整数部分
}
这部分代码没什么用,就做了一个简单的运算,加权平均值滤波算法如下:
/*
* 输入 参数:1.需处理数组首地址
* 2.权数组首地址(暂且用power_buf,英文不行)
* 3.数组长度
*/
int filter(char *dat_buf_p, char *power_buf_p, char buf_num)
{
int sum=0;
int sum_mul=0;
for(char i=0; ibuf_num; i++)
{
sum+=(*dat_buf_p)*(*power_buf_p); //数组*权值
sum_mul+=*power_buf_p; //生成权值和
dat_buf_p++; //数组指针加一,指向数组中下一个数
power_buf_p++; //权数组指针加一,指向权数组中下一个权
}
return (int)(sum/ sum_mul);
}
你试试这个函数,有问题跟我说。