您当前的位置: 首页 >  算法

slandarer

暂无认证

  • 2浏览

    0关注

    248博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MATLAB | 二维波函数坍缩算法随机地图生成

slandarer 发布时间:2022-09-22 16:05:58 ,浏览量:2

本文原理解释和很多图片结构来自和参考了知乎大佬大灰熊的这篇:

https://zhuanlan.zhihu.com/p/542605872

算法解释

该算法叫做二维波函数坍缩算法,虽然名听着很玄乎但其实和数独区别也不大,都是一些图决定周围图能取哪些:

在网站 (http://cr31.co.uk/stagecast/wang/tiles_e.html)可以获取一系列的素材图:

这张图每32个像素就是一个图块,整张图能划分为4x4个图块

图像分割且编号
% 图片切分
imgList{N*N}=[];
pixNum=size(img,1)/N;
for i=1:N
    for j=1:N
        imgList{sub2ind([N,N],i,j)}=...
        img(((i-1)*pixNum+1):(i*pixNum),...
            ((j-1)*pixNum+1):(j*pixNum),:);
    end
end

各个方向的可行图

比如编号为10的图像右侧只有几张图可以与之相邻:

可以通过计算边界的均方根误差,若是误差小于一定值就认为可以相连(就有点像某年数学建模国赛碎纸片拼接第一问):

% 构建联通表
imgAdjList(N*N).r=[];
imgAdjList(N*N).l=[];
imgAdjList(N*N).u=[];
imgAdjList(N*N).d=[];
for i=1:N*N
    imgC=imgList{i};
    imgAdjList(i).r=[];
    imgAdjList(i).l=[];
    imgAdjList(i).u=[];
    imgAdjList(i).d=[];
    for j=1:N*N
        imgS=imgList{j};
% 以下是均方根误差检测部分
% 检测是否右联通 -----------------------------------------------------------
        rImgC=imgC(:,end,:);rImgC=rImgC(:);
        rImgS=imgS(:,1,:);rImgS=rImgS(:);
        rErr=sqrt(mean((rImgC-rImgS).^2));
        if rErr            
关注
打赏
1664692598
查看更多评论
0.1782s