1.svdå解 cè¯è¨å®ç°
2.Matlab DWT与SVD数字水印解析 参考源码
3.matlaB实现SVD图像去噪源代码!荐源?
svdå解 cè¯è¨å®ç°
/*æ¬ç¨åºå¨linux g++ä¸ç¼è¯éè¿
bool svd(vector<vector<double> > A,源码 int K, vector<vector<double> > &U, vector<double> &S, vector<vector<double> > &V);
A: è¾å ¥å¾ å解ç©éµ
K: è¾å ¥ï¼ååK大å¥å¼å¼åå¥å¼åé
U[0],U[1],...,U[K-1]: åK大å¥å¼å¼å¯¹åºçå·¦å¥å¼åé
S[0],S[1],...,S[K-1]: åK大å¥å¼å¼ S[0]>=S[1]>=...>=S[K-1]
V[0],V[1],...,V[K-1]: åK大å¥å¼å¼å¯¹åºçå³å¥å¼åé
*/
#include <cmath>
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <vector>
using namespace std;
const int MAX_ITER=;
const double eps=0.;
double get_norm(double *x, int n){
double r=0;
for(int i=0;i<n;i++)
r+=x[i]*x[i];
return sqrt(r);
}
double normalize(double *x, int n){
double r=get_norm(x,n);
if(r<eps)
return 0;
for(int i=0;i<n;i++)
x[i]/=r;
return r;
}
inline double product(double*a, double *b,int n){
double r=0;
for(int i=0;i<n;i++)
r+=a[i]*b[i];
return r;
}
void orth(double *a, double *b, int n){ //|a|=1
double r=product(a,b,n);
for(int i=0;i<n;i++)
b[i]-=r*a[i];
}
bool svd(vector<vector<double> > A, int K, vector<vector<double> > &U, vector<double> &S, vector<vector<double> > &V){
int M=A.size();
int N=A[0].size();
U.clear();
V.clear();
S.clear();
S.resize(K,0);
U.resize(K);
for(int i=0;i<K;i++)
U[i].resize(M,0);
V.resize(K);
for(int i=0;i<K;i++)
V[i].resize(N,0);
srand(time(0));
double *left_vector=new double[M];
double *next_left_vector=new double[M];
double *right_vector=new double[N];
double *next_right_vector=new double[N];
int col=0;
for(int col=0;col<K;col++){
double diff=1;
double r=-1;
while(1){
for(int i=0;i<M;i++)
left_vector[i]= (float)rand() / RAND_MAX;
if(normalize(left_vector, M)>eps)
break;
}
for(int iter=0;diff>=eps && iter<MAX_ITER;iter++){
memset(next_left_vector,0,sizeof(double)*M);
memset(next_right_vector,0,sizeof(double)*N);
for(int i=0;i<M;i++)
for(int j=0;j<N;j++)
next_right_vector[j]+=left_vector[i]*A[i][j];
r=normalize(next_right_vector,N);
if(r<eps) break;
for(int i=0;i<col;i++)
orth(&V[i][0],next_right_vector,N);
normalize(next_right_vector,N);
for(int i=0;i<M;i++)
for(int j=0;j<N;j++)
next_left_vector[i]+=next_right_vector[j]*A[i][j];
r=normalize(next_left_vector,M);
if(r<eps) break;
for(int i=0;i<col;i++)
orth(&U[i][0],next_left_vector,M);
normalize(next_left_vector,M);
diff=0;
for(int i=0;i<M;i++){
double d=next_left_vector[i]-left_vector[i];
diff+=d*d;
}
memcpy(left_vector,next_left_vector,sizeof(double)*M);
memcpy(right_vector,next_right_vector,sizeof(double)*N);
}
if(r>=eps){
S[col]=r;
memcpy((char *)&U[col][0],left_vector,sizeof(double)*M);
memcpy((char *)&V[col][0],right_vector,sizeof(double)*N);
}else{
cout<<r<<endl;
break;
}
}
delete [] next_left_vector;
delete [] next_right_vector;
delete [] left_vector;
delete [] right_vector;
return true;
}
void print(vector<vector<double> > &A){
}
int main(){
int m=;
int n=8;
int k=5;
//å解ä¸ä¸ª*8çç©éµAï¼æ±å ¶å5个å¥å¼å¼åå¥å¼åé
srand(time(0));
vector<vector<double> > A;
A.resize(m);
for(int i=0;i<m;i++){
A[i].resize(n);
for(int j=0;j<n;j++)
A[i][j]=(float)rand()/RAND_MAX-0.5;
}
cout<<"A="<<endl;
for(int i=0;i<A.size();i++){
for(int j=0;j<A[i].size();j++){
cout<<setw()<<A[i][j]<<' ';
}
cout<<endl;
}
cout<<endl;
vector<vector<double> > U;
vector<double> S;
vector<vector<double> > V;
svd(A,k,U,S,V);
cout<<"U="<<endl;
for(int i=0;i<U[0].size();i++){
for(int j=0;j<U.size();j++){
cout<<setw()<<U[j][i]<<' ';
}
cout<<endl;
}
cout<<endl;
cout<<"S="<<endl;
for(int i=0;i<S.size();i++){
cout<<setw(7)<<S[i]<<' ';
}
cout<<endl;
cout<<"V="<<endl;
for(int i=0;i<V[0].size();i++){
for(int j=0;j<V.size();j++){
cout<<setw()<<V[j][i]<<' ';
}
cout<<endl;
}
return 0;
}
Matlab DWT与SVD数字水印解析 参考源码
Matlab中的DWT(离散小波变换)与SVD(奇异值分解)在数字水印技术中扮演着关键角色。它们基于变换域的荐源特性,提供了一种稳健的源码易语言游戏源码源码水印嵌入和提取策略。DCT(离散余弦变换)利用图像高频信息的荐源集中性,而SVD的源码稳定性则确保了水印在图像扰动时的可靠性。在水印嵌入过程中,荐源首先对图像进行DCT变换,源码然后选择SVD分解来处理变换后的荐源系数,将水印信息巧妙地嵌入到奇异值矩阵中。源码这种策略对几何攻击具有一定的荐源程序源码泄露危害抵抗能力,且不影响图像视觉质量。源码
对于实际应用,荐源如图像打印和扫描后的源码水印提取,SVD嵌入的荐源水印算法尤其重要,因为它能应对印刷过程中的秒余额php源码模拟-数字转换和设备扭曲。然而,传统SVD水印需要原始图像,存在传输安全风险。本文的改进算法则在嵌入阶段避免了使用原图的SVD结果,降低了对原始数据的分屏源码12系统依赖,提高了效率。水印的嵌入步骤包括选取图像、分离绿色通道、DCT和SVD处理,接着将水印灰度化并嵌入到SVD的王卡api源码奇异值中,最后通过量化形成带水印的图像。
而在水印提取时,即使面对打印扫描攻击后的图像,通过读取图像、DCT变换和SVD分解,可以计算并提取出嵌入的水印信息。这种策略兼顾了水印的鲁棒性和透明性,是数字水印技术的重要组成部分。
matlaB实现SVD图像去噪源代码!?
MATLAB语言基础
第一节 使用MATLAB的窗口环境
一、MATLAB语言的显著特点
1、具有强大的矩阵运算能力:Matrix Laboratory(矩阵实验室),使得矩阵运算非常简单。
2、是一种演算式语言
MATLAB的基本数据单元是既不需要指定维数,也不需要说明数据类型的矩阵(向量和标量为矩阵的特例),而且数学表达式和运算规则与通常的习惯相同。
因此MATLAB语言编程简单,使用方便。
例 exp2_1.m