帮我翻译一个matlab程序 简单的说明每句话的要做什么 为什么这么做 太简单的可以不翻译 高分

帮我翻译一个matlab程序 简单的说明每句话的要做什么 为什么这么做 太简单的可以不翻译 高分,第1张

clear

%装入原图像1

load woman %读入图像

I=X

%小波函数

type = 'db1' %选择小波类型

% 2维离散Daubechies小波变换

[CA1, CH1, CV1, CD1] = dwt2(I,type) %小波变换

C1 = [CH1 CV1 CD1]

%系数矩阵大小

[length1, width1] = size(CA1)

[M1, N1] = size(C1)

% 定义阈值T1

T1 =50 %水印参数

alpha = 0.2

%在图像中加入水印

for counter2 = 1: 1: N1

for counter1 = 1: 1: M1

if( C1(counter1, counter2) >T1 ) %如果C1>阈值

marked1(counter1,counter2) = randn(1,1) %marked1为水印图像

NEWC1(counter1, counter2) = double( C1(counter1, counter2) ) +alpha * abs( double( C1(counter1, counter2) ) ) * marked1(counter1,counter2) %NEWC1为加入水印后的小波域

else

marked1(counter1, counter2) = 0

NEWC1(counter1, counter2) = double( C1(counter1, counter2) )

end

end

end

%重构图像

NEWCH1 = NEWC1(1:length1, 1:width1)

NEWCV1 = NEWC1(1:length1, width1+1:2*width1)

NEWCD1 = NEWC1(1:length1, 2*width1+1:3*width1)

R1 = double( idwt2(CA1, NEWCH1, NEWCV1, NEWCD1, type) )

%分离水印

watermark1 = double(R1) - double(I)

figure(1)

subplot(1,2,1)

image(I) %显示原始图像

axis('square')

title('原始图像')

subplot(1,2,2)

imshow(R1/250)%显示小波变换后图像

axis('square')

title('Daubechies小波变换后图像')

figure(2)

imshow(watermark1*10^16)%显示水印图像

axis('square')

title('水印图像')

% 水印检测

newmarked1 = reshape(marked1, M1*N1, 1)

% 检测阈值

T2 = 60

for counter2 = 1: 1: N1

for counter1 = 1: 1: M1

if( NEWC1(counter1, counter2) >T2 ) %当NEWC1大于阈值时提取水印

NEWC1X(counter1, counter2) = NEWC1(counter1, counter2)

else

NEWC1X(counter1, counter2) = 0

end

end

end

NEWC1X = reshape(NEWC1X, M1*N1, 1)%锐化

correlation1 = zeros(1000,1)

for corrcounter = 1: 1: 1000

if( corrcounter == 500)

correlation1(corrcounter,1) = NEWC1X'*newmarked1 / (M1*N1)

else

rnmark = randn(M1*N1,1)

correlation1(corrcounter,1) = NEWC1X'*rnmark / (M1*N1)

end

end

% 计算阈值

originalthreshold = 0

for counter2 = 1: 1: N1

for counter1 = 1: 1: M1

if( NEWC1(counter1, counter2) >T2 )

originalthreshold = originalthreshold + abs( NEWC1(counter1, counter2) )

end

end

end

originalthreshold = originalthreshold * alpha / (2*M1*N1)

corrcounter = 1000

originalthresholdvector = ones(corrcounter,1) * originalthreshold

figure(3)

plot(correlation1, '-')

hold on

plot(originalthresholdvector, '--')%显示原始的加水印图像

title('原始的加水印图像')

xlabel('水印')

ylabel('检测响应')

在matlab的库里面没有pfilters这个函数,是你自己定义的吧?这个函数用来处理pfilt这个字符串的,通过这个字符串获得你滤波的系数h和g,然后送到另外一个自己定义的函数lpdec中。

不知道这么说能不能帮到你

使用imnoise函数

X=imread('D:\matlab7.1\toolbox\images\imdemos\greens.jpg')

Y=imnoise(X,'gaussian')%%默认均值为0,方差为0.01

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

A double-class image must have values between zero and one,这个问题是你的图像是double型,但是你的图像的数值不是0-1之间,给他除以255即可!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7932368.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存