「java制作DFT」java制作网页

博主:adminadmin 2022-11-28 20:46:07 63

本篇文章给大家谈谈java制作DFT,以及java制作网页对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java 获取当前时间,将天数减一天,返回Date.

具体如下:

java.util.Calendar

voidsetTime(Date date)

Sets this Calendar's time with the given Date.设置日期时间

abstract  void add(int field,  int amount)

Adds or subtracts the specified amount of time to the given calendar field,

based on the calendar's rules.

参数1是  Calendar.DAY_OF_MONTH

参数2是天数,如果是负数,则为减

DategetTime()

Returns a Date object representing thisCalendar's time value (millisecond offset from the Epoch").得到时间

扩展资料

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等

(参考资料 百度百科 Java)

java swt 怎样选中table中某一行 ,然后进行修改?

package testpackage1;

import java.awt.*;

import javax.swing.*;

import javax.swing.event.ListSelectionEvent;

import javax.swing.event.ListSelectionListener;

import javax.swing.table.DefaultTableModel;

import java.awt.event.*;

public class demo extends JFrame implements ActionListener {

JButton jb1, jb2, jb3, jb4, jb5;

JPanel jp1, jp2, jp3, jp4;

JLabel jtf1, jtf2, jtf3, jtf4, jtf5;

JComboBox jc;

JList jlist;

String item1[] = { "软件1207班", "软件1208班" };

String item2[] = { "第一个", "第二个", "第三个", "第四个" };

JScrollPane jsc;

String columnNames[] = { "学号", "姓名", "性别", "班级" };

DefaultTableModel dtm;

JTable table;

JTextField jt1, jt2, jt3, jt4;

DefaultTableModel dft;

public demo(String s) {

setTitle(s);

jp1 = new JPanel();

jp2 = new JPanel();

jp3 = new JPanel();

jp4 = new JPanel();

jb1 = new JButton("增加");

jb2 = new JButton("删除");

jb3 = new JButton("修改");

jb4 = new JButton("清空");

jb5 = new JButton("查询");

jtf1 = new JLabel("学号");

jtf2 = new JLabel("姓名");

jtf3 = new JLabel("年龄");

jtf4 = new JLabel("班级");

table = new JTable();

dtm = new DefaultTableModel(columnNames, 0);

dft = new DefaultTableModel();

jsc = new JScrollPane();

jc = new JComboBox(item1);

}

public void first() {

jb1.addActionListener(this);

jb2.addActionListener(this);

jb3.addActionListener(this);

jb4.addActionListener(this);

jb5.addActionListener(this);

jp4.setLayout(new GridLayout(3, 1));

jp1.setLayout(new FlowLayout());

jp2.setLayout(new FlowLayout());

jp3.setLayout(new FlowLayout());

this.setLayout(new FlowLayout());

jt1 = new JTextField(10);

jt2 = new JTextField(10);

jt3 = new JTextField(10);

jt4 = new JTextField(10);

this.setLayout(new FlowLayout());

jp1.add(jtf1);

jp1.add(jt1);

jp1.add(jtf2);

jp1.add(jt2);

jp2.add(jtf3);

jp2.add(jt3);

jp2.add(jtf4);

jp2.add(jc);

jp3.add(jb1);

jp3.add(jb2);

jp3.add(jb3);

jp3.add(jb4);

jp3.add(jb5);

jp4.add(jp1);

jp4.add(jp2);

jp4.add(jp3);

this.add(jp4);

table.setModel(dtm);

jsc.getViewport().add(table);

this.add(jsc);

// 窗口大小

this.setSize(480, 600);

// 窗口是否可见

this.setVisible(true);

// 居中窗口

Dimension scr = Toolkit.getDefaultToolkit().getScreenSize();

this.setLocation((scr.width - this.getWidth()) / 2, (scr.height - this

.getHeight()) / 2);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) {

demo w = new demo("窗口实验");

w.first();

}

public void actionPerformed(ActionEvent e) {

if (e.getSource().equals(jb1)) {

String stri = "";

if (jc.getSelectedItem().toString().equals("软件1207班")) {

stri = "软件1207班";

} else if (jc.getSelectedItem().toString().equals("软件1208班")) {

stri = "软件1208班";

}

String str[] = { jt1.getText(), jt2.getText(), jt3.getText(), stri };

dtm.addRow(str);

} else if (e.getSource().equals(jb2)) {

int index = table.getSelectedRow();

dtm.removeRow(index);

} else if (e.getSource().equals(jb3)) {

int index = table.getSelectedRow();

int ii = table.getSelectedColumn();

String st="";

if (ii == 0) {

st = jt1.getText();

} else if (ii == 1) {

st = jt2.getText();

} else if (ii == 2) {

st = jt3.getText();

} else if (ii == 3) {

if (jc.getSelectedItem().toString().equals("软件1207班")) {

st = "软件1207班";

} else if (jc.getSelectedItem().toString().equals("软件1208班")) {

st = "软件1208班";

}

}

if (index = 0) {

dtm.setValueAt(st, index, ii);

}

} else if (e.getSource().equals(jb4)) {

int i = table.getRowCount();

for (i = i - 1; i = 0; i--) {

dtm.removeRow(i);

}

} else if (e.getSource().equals(jb5)) {

}//else if(table.getSelectedRow();){}

}

}

图像傅里叶变换的步骤是什么? java

冈萨雷斯版图像处理里面的解释非常形象:一个恰当的比喻是将傅里叶变换比作一个玻璃棱镜。棱镜是可以将光分解为不同颜色的物理仪器,每个成分的颜色由波长(或频率)来决定。傅里叶变换可以看作是数学上的棱镜,将函数基于频率分解为不同的成分。当考虑光时,讨论它的光谱或频率谱。同样, 傅立叶变换能通过频率成分来分析一个函数。

Fourier theory讲的就是:任何信号(如图像信号)都可以表示成一系列正弦信号的叠加,在图像领域就是将图像brightness variation 作为正弦变量。比如下图的正弦模式可在单傅里叶中由三个分量编码:频率f、幅值A、相位γ 这三个value可以描述正弦图像中的所有信息。

1.frequency

frequency在空间域上可由亮度调节,例如左图的frequency比右图的frequency低……

2.幅值magnitude(amplitude)

sin函数的幅值用于描述对比度,或者说是图像中最明和最暗的峰值之间的差。(一个负幅值表示一个对比逆转,即明暗交换。)

3.相位表示相对于原始波形,这个波形的偏移量(左or右)。

=================================================================

一个傅里叶变换编码是一系列正弦曲线的编码,他们的频率从0开始(即没有调整,相位为0,平均亮度处),到尼奎斯特频率(即数字图像中可被编码的最高频率,它和像素大小、resolution有关)。傅里叶变换同时将图像中所有频率进行编码:一个只包含一个频率f1的信号在频谱上横坐标f为f1的点处绘制一个单峰值,峰值高度等于对应的振幅amplitude,或者正弦曲线信号的高度。如下图所示。

DC term直流信号对应于频率为0的点,表示整幅图像的平均亮度,如果直流信号DC=0就表示整幅图像平均亮度的像素点个数=0,可推出灰度图中,正弦曲线在正负值之间交替变化,但是由于灰度图中没有负值,所以所有的真实图像都有一个正的DC term,如上图所示。

出于某些数学分析原因,经常把傅里叶变换用mirror-image表示,在原点的的两端,frequency都是增加的方向,具有相同的幅值。

上面讲的都是一维信号,一个二维傅里叶变换是一维傅里叶变换在每一个行扫描线和列扫描线上的傅里叶变换的叠加。

傅里叶谱图上的每一个像素点都代表一个频率值,幅值由像素点亮度变码而得。最中心的亮点是指直流分量,傅里叶谱图中越亮的点,对应于灰度图中对比越强烈(对比度越大)的点。

由于每一列扫描线上没有变化,所以相应的fourier spectrum上行向量为0, 每一行扫描线上有contrast,所以有频率幅值。

这里频率比上面的小,相应的亮点比上副图也集中。

图像傅立叶变换的物理意义

傅里叶提出任何周期函数都可以表示为不同频率的正弦和/或余弦和的形式,每个正弦和/或余弦乘以不同的系数(傅里叶级数)。图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度.在噪声点和图像边缘处的频率为高频。

傅立叶变换在实际中有非常明显的物理意义,设f是一个能量有限的模拟信号,则其傅立叶变换就表示f的谱。从纯粹的数学意义上看,傅立叶变换是将一个函数转换为一系列周期函数来处理的。从物理效果看,傅立叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。换句话说,傅立叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅立叶逆变换是将图像的频率分布函数变换为灰度分布函数.

傅立叶变换以前,图像(未压缩的位图)是由对在连续空间(现实空间)上的采样得到一系列点的集合,习惯用一个二维矩阵表示空间上各点,则图像可由z=f(x,y)来表示。由于空间是三维的,图像是二维的,因此空间中物体在另一个维度上的关系就由梯度来表示,这样可以通过观察图像得知物体在三维空间中的对应关系。为什么要提梯度?因为实际上对图像进行二维傅立叶变换得到频谱图,就是图像梯度的分布图,当然频谱图上的各点与图像上各点并不存在一一对应的关系,即使在不移频的情况下也是没有。傅立叶频谱图上我们看到的明暗不一的亮点,实际上图像上某一点与邻域点差异的强弱,即梯度的大小,也即该点的频率的大小(可以这么理解,图像中的低频部分指低梯度的点,高频部分相反)。一般来讲,梯度大则该点的亮度强,否则该点亮度弱。这样通过观察傅立叶变换后的频谱图,也叫功率图,首先就可以看出,图像的能量分布,如果频谱图中暗的点数更多,那么实际图像是比较柔和的(因为各点与邻域差异都不大,梯度相对较小),反之,如果频谱图中亮的点数多,那么实际图像一定是尖锐的,边界分明且边界两边像素差异较大的。对频谱移频到原点以后,可以看出图像的频率分布是以原点为圆心,对称分布的。将频谱移频到圆心除了可以清晰地看出图像频率分布以外,还有一个好处,它可以分离出有周期性规律的干扰信号,比如正弦干扰,一副带有正弦干扰,移频到原点的频谱图上可以看出除了中心以外还存在以某一点为中心,对称分布的亮点集合,这个集合就是干扰噪音产生的,这时可以很直观的通过在该位置放置带阻滤波器消除干扰.

图像是两个参数的函数,通过一组正交函数的线性组合可以将其分解,而傅里叶就是通过谐波函数来分解的。而对于离散傅里叶变换,傅里叶变换的条件是存在的。

傅里叶变换进行图像处理有几个特点

1. 直流成分F(0,0)等于图像的平均值;

2. 能量频谱|F(u,v)|^2完全对称于原点;其中F=PfQ, f表示原图,P和Q都是对称的实正交矩阵,这个公式表示傅里叶变换就是个正交矩阵的正交变换

3.图像f平移(a,b)后,F只有exp[-2pij(au/M+bv/M)]的相位变化,能量频谱不发生变化。

4. 图像f自乘平均等于能量频谱的总和,f的分散等于能量频谱中除直流成分后的总和。

5.图像f(x,y)和g(x,y)的卷积h(x,y)=f(x,y)*g(x,y)的傅里叶变换H(u,v)等于f(x,y)和g(x,y)各自的傅里叶变换的乘积。

图像中的每个点通过傅里叶变换都成了谐波函数的组合,也就有了频率,这个频率则是在这一点上所有产生这个灰度的频率之和,也就是说傅里叶变换可以将这些频率分开来。当想除去图像背景时,只要去掉背景的频率就可以了。

在进行傅里叶变换时,实际上在某一特定的频率下,计算每个图像位置上的乘积。就是f(x,y)exp[-j2pi(ux+vy)],然后计算下一个频率。这样就得到了频率函数。

也就是说,看到傅里叶变换的每一项(对每对频率u,v,F(u,v)的值)是由f(x)函数所有值的和组成。f(x)的值与各种频率的正弦值和余弦值相乘。因此,频率u, v决定了变换的频率成分(x, y也作用于频率,但是它们相加,对频率有相同的贡献)。

通常在进行傅里叶变换之前用(-1)^(x+y)乘以输入的图像函数,这样就可以将傅里叶变换的原点F(0,0)移到(M/2,N/2)上。

每个F(u,v)项包含了被指数修正的f(x,y)的所有值,因而一般不可能建立图像特定分量和其变换之间的联系。然而,一般文献通常会有关于傅里叶变换的频率分量和图像空间特征之间联系的阐述。变换最慢的频率成分(u=v=0)对应一幅图像的平均灰度级。当从变换的原点移开时,低频对应着图像的慢变换分量,较高的频率开始对应图像中变化越来越快的灰度级。这些事物体的边缘和由灰度级的突发改变(如噪声)标志的图像成分。

在频率域中的滤波基础

1. (-1)^(x+y)乘以输入图像来进行中心变换

2. 由(1)计算图像的DFT, 即F(u,v)

3. 用滤波器函数H(u,v)乘以F(u,v)

4. 计算(3)中的结果的反DFT

5. 得到(4)中的结果的实部

6. 用(-1)^(x+y)乘以(5)中的结果

另外说明以下几点:

1、图像经过二维傅立叶变换后,其变换系数矩阵表明:

若变换矩阵Fn原点设在中心,其频谱能量集中分布在变换系数短阵的中心附近(图中阴影区)。若所用的二维傅立叶变换矩阵Fn的原点设在左上角,那么图像信号能量将集中在系数矩阵的四个角上。这是由二维傅立叶变换本身性质决定的。同时也表明一幅图像能量集中低频区域。

2 、变换之后的图像在原点平移之前四角是低频,最亮,平移之后中间部分是低频,最亮,亮度大说明低频的能量大(幅角比较大)

在Java中从表中得到数据怎么进行模糊查询然后在表中显示

第1步,判断是否有记录返回,这个看数据资料了。不过这样写的密码,很宽松。

再,看初始化表格是否对。这个没过程,不知道了。

java实现金额转换,阿拉伯数字的金额转换成中国传统的形式

直接通过以下接口类方法实现即可:

import java.math.BigDecimal;

/**

* 金额工具类

*

* @author zn

*

* @Date 2013-2-1

* @Email zn.share@gmail.com

*/

public class MoneyUtil {

private static final int DFT_SCALE = 2;

/** 大写数字 */

private static final String[] NUMBERS = { "零", "壹", "贰", "叁", "肆", "伍",

"陆", "柒", "捌", "玖" };

/** 整数部分的单位 */

private static final String[] IUNIT = { "元", "拾", "佰", "仟", "万", "拾", "佰",

"仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟" };

/** 小数部分的单位 */

private static final String[] DUNIT = { "角", "分", "厘" };

/**

* 得到大写金额。

*/

public static String toChinese(String str) {

str = str.replaceAll(",", "");// 去掉","

String integerStr;// 整数部分数字

String decimalStr;// 小数部分数字

// 初始化:分离整数部分和小数部分

if (str.indexOf(".") 0) {

integerStr = str.substring(0, str.indexOf("."));

decimalStr = str.substring(str.indexOf(".") + 1);

} else if (str.indexOf(".") == 0) {

integerStr = "";

decimalStr = str.substring(1);

} else {

integerStr = str;

decimalStr = "";

}

// integerStr去掉首0,不必去掉decimalStr的尾0(超出部分舍去)

if (!integerStr.equals("")) {

integerStr = Long.toString(Long.parseLong(integerStr));

if (integerStr.equals("0")) {

integerStr = "";

}

}

// overflow超出处理能力,直接返回

if (integerStr.length() IUNIT.length) {

System.out.println(str + ":超出处理能力");

return str;

}

int[] integers = toArray(integerStr);// 整数部分数字

boolean isMust5 = isMust5(integerStr);// 设置万单位

int[] decimals = toArray(decimalStr);// 小数部分数字

return getChineseInteger(integers, isMust5)

+ getChineseDecimal(decimals);

}

/**

* 整数部分和小数部分转换为数组,从高位至低位

*/

private static int[] toArray(String number) {

int[] array = new int[number.length()];

for (int i = 0; i number.length(); i++) {

array[i] = Integer.parseInt(number.substring(i, i + 1));

}

return array;

}

/**

* 得到中文金额的整数部分。

*/

private static String getChineseInteger(int[] integers, boolean isMust5) {

StringBuffer chineseInteger = new StringBuffer("");

int length = integers.length;

for (int i = 0; i length; i++) {

// 0出现在关键位置:1234(万)5678(亿)9012(万)3456(元)

// 特殊情况:10(拾元、壹拾元、壹拾万元、拾万元)

String key = "";

if (integers[i] == 0) {

if ((length - i) == 13)// 万(亿)(必填)

key = IUNIT[4];

else if ((length - i) == 9)// 亿(必填)

key = IUNIT[8];

else if ((length - i) == 5 isMust5)// 万(不必填)

key = IUNIT[4];

else if ((length - i) == 1)// 元(必填)

key = IUNIT[0];

// 0遇非0时补零,不包含最后一位

if ((length - i) 1 integers[i + 1] != 0)

key += NUMBERS[0];

}

chineseInteger.append(integers[i] == 0 ? key

: (NUMBERS[integers[i]] + IUNIT[length - i - 1]));

}

return chineseInteger.toString();

}

/**

* 得到中文金额的小数部分。

*/

private static String getChineseDecimal(int[] decimals) {

StringBuffer chineseDecimal = new StringBuffer("");

for (int i = 0; i decimals.length; i++) {

// 舍去3位小数之后的

if (i == 3)

break;

chineseDecimal.append(decimals[i] == 0 ? ""

: (NUMBERS[decimals[i]] + DUNIT[i]));

}

return chineseDecimal.toString();

}

/**

* 判断第5位数字的单位"万"是否应加。

*/

private static boolean isMust5(String integerStr) {

int length = integerStr.length();

if (length 4) {

String subInteger = "";

if (length 8) { // TODO 12-9-17

// 取得从低位数,第5到第8位的字串

subInteger = integerStr.substring(length - 8, length - 4);

} else {

subInteger = integerStr.substring(0, length - 4);

}

return Integer.parseInt(subInteger) 0;

} else {

return false;

}

}

/**

* BigDecimal 相乘,四舍五入保留0位

*

* @param a

* @param b

* @return a*b

*/

public static BigDecimal mutiply(String a, String b, int roundingMode) {

BigDecimal bd = new BigDecimal(a);

return bd.multiply(new BigDecimal(b)).setScale(DFT_SCALE, roundingMode);

}

/**

* BigDecimal 相除,四舍五入保留两位

*

* @param a

* @param b

* @return a/b

*/

public static BigDecimal div(String a, String b, int roundingMode) {

BigDecimal decimal1 = new BigDecimal(a);

BigDecimal decimal2 = new BigDecimal(b);

return decimal1.divide(decimal2, DFT_SCALE, roundingMode);

}

/**

* BigDecimal 相加,四舍五入保留两位

*

* @param a

* @param b

* @return a+b

*/

public static BigDecimal sum(String a, String b, int roundingMode) {

BigDecimal decimal1 = new BigDecimal(a);

BigDecimal decimal2 = new BigDecimal(b);

// DecimalFormat format = new DecimalFormat("#0.00");

return decimal1.add(decimal2).setScale(DFT_SCALE, roundingMode);

}

/**

* BigDecimal 相减,四舍五入保留两位

*

* @param a

* @param b

* @return a+b

*/

public static BigDecimal sub(String a, String b, int roundingMode) {

BigDecimal decimal1 = new BigDecimal(a);

BigDecimal decimal2 = new BigDecimal(b);

// DecimalFormat format = new DecimalFormat("#0.00");

return decimal1.subtract(decimal2).setScale(DFT_SCALE, roundingMode);

}

/**

* 100.00 为10000

*

* @param a

* @return

*/

public static BigDecimal format(String a, int roundingMode) {

return new BigDecimal(a).multiply(new BigDecimal(100)).setScale(0,

roundingMode);

}

public static void main(String[] args) {

String number = "54452";

System.out.println(number + " " + MoneyUtil.toChinese(number));

number = "30200";

System.out.println(number + " " + MoneyUtil.toChinese(number));

number = "30000.05";

System.out.println(number + " " + MoneyUtil.toChinese(number));

number = "30000.00";

System.out.println(number + " " + MoneyUtil.toChinese(number));

}

}

备注:最后面的main方法是具体的调用。

求傅里叶变换(DFT)Java源码 图像处理

您对于傅里叶变换恐怕并不十分理解

傅里叶变换的实质是将一个信号分离为无穷多多正弦/复指数信号的加成,也就是说,把信号变成正弦信号相加的形式——既然是无穷多个信号相加,那对于非周期信号来说,每个信号的加权应该都是零——但有密度上的差别,你可以对比概率论中的概率密度来思考一下——落到每一个点的概率都是无限小,但这些无限小是有差别的

所以,傅里叶变换之后,横坐标即为分离出的正弦信号的频率,纵坐标对应的是加权密度

对于周期信号来说,因为确实可以提取出某些频率的正弦波成分,所以其加权不为零——在幅度谱上,表现为无限大——但这些无限大显然是有区别的,所以我们用冲激函数表示

已经说过,傅里叶变换是把各种形式的信号用正弦信号表示,因此非正弦信号进行傅里叶变换,会得到与原信号频率不同的成分——都是原信号频率的整数倍。这些高频信号是用来修饰频率与原信号相同的正弦信号,使之趋近于原信号的。所以说,频谱上频率最低的一个峰(往往是幅度上最高的),就是原信号频率。

傅里叶变换把信号由时域转为频域,因此把不同频率的信号在时域上拼接起来进行傅里叶变换是没有意义的——实际情况下,我们隔一段时间采集一次信号进行变换,才能体现出信号在频域上随时间的变化。

我的语言可能比较晦涩,但我已尽我所能向你讲述我的一点理解——真心希望能对你有用。我已经很久没在知道上回答过问题了,之所以回答这个问题,是因为我本人在学习傅里叶变换及拉普拉斯变换的过程中着实受益匪浅——它们几乎改变了我对世界的认识。傅里叶变换值得你用心去理解——哪怕苦苦思索几个月也是值得的——我当初也想过:只要会算题就行。但浙大校训“求是”时时刻刻鞭策着我追求对理论的理解——最终经过很痛苦的一番思索才恍然大悟。建议你看一下我们信号与系统课程的教材:化学工业出版社的《信号与系统》,会有所帮助。

java制作DFT的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java制作网页、java制作DFT的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-28,除非注明,否则均为首码项目网原创文章,转载请注明出处。