回 帖 发 新 帖 刷新版面

主题:[讨论]求助:Arnold置乱变换的问题

用Arnold置乱变换做图像加密,程序写出来了但是结果却不对,经过周期变换后不能恢复原图,下面是程序,请大家帮我看看那里有问题了~~


function embedimage=arnold1(embedimage,N)
[m,n]=size(embedimage);
a=double(embedimage)/255;
for k=1:N
    for i=1:m
        for j=1:n
            x=i+j;
            y=i+2*j;
            if x>m
                x=mod(x,m);
            end;
            if y>m
                y=mod(y,m);
            end;
            if x==0
                x=m;
            end;
            if y==0
                y=m;
            end;
            a1(x,y)=a(i,j);
        end
    end
    embedimage1=a1;
end
imshow(embedimage1)

还有就是怎么样才能对彩色的图像进行8*8的DCT变换?????

回复列表 (共6个回复)

沙发

兄弟,你到底想干什么说清楚一点,你程序也写点注释啊,就你这样的程序看的懂才怪,并且还是一个函数,谁知道你到时候又要怎么样调用呢?

板凳


后面是不是应该加一句embedimage1=uint8(round(a1*255));
但运行出来是一个点。唉

3 楼

对彩色的图像进行8*8的DCT变换
先要定义一个变换矩阵:用T = dctmtx(8)
然后再对每个分量做DCT变换就可以了

4 楼

没做过对彩色的图像进行8*8的DCT变换,做过对黑白图像进行8*8的DCT变换。
你试试灰度转化吧。

5 楼

你的程序思路是没错的,但只能运行一次,你可以用最简单的2×2矩阵来验算(周期为3)
x = [1 3 ;5 7]结果不管你N为多少,输出值都会是y = [3 5; 1 7]
问题出在最外层循环那里,每次ij值都不变的,所以不管N多少,运行都为1次
应该在 embedimage1=a1;前加一句a=a1;
我运行过可以了。

6 楼

function g = arnold2(h,N)
[m,n]=size(h);
a=double(h);
for k=1:N
    for i=1:m
        for j=1:n
            x=i+j;
            y=i+2*j;
            if x>m
                x=mod(x,m);
            end;
            if y>m
                y=mod(y,m);
            end;
            if x==0
                x=m;
            end;
            if y==0
                y=m;
            end;
            a1(x,y)=a(i,j);
        end
    end
    a=a1;
    g=a1;
end
figure,imshow(g)

我来回复

您尚未登录,请登录后再回复。点此登录或注册