能够使用这样一条线遍历图像中所有的像素,不过这里没有这样做,而只是生成了这样一条曲线。

程序中h,w是最终图像的高和宽,n为希尔伯特曲线阶数。

这里如果n等于log2(h)或log2(w),则图像就全为白了,也算是正好遍历所有像素了。

当然,n很大的话,图像也是全为白的,不过,那样不算正好遍历吧。

代码中生成曲线的核心函数可以在这里找到

生成图像如下:

matlab代码如下:

main.m

clear all;close all;clc;

h=;
w=;
n=;
imgn=zeros(h,w);
[x,y]=hilbert(n);
x=floor((x+0.5)*w)+;
y=floor((y+0.5)*h)+; l=length(x);
for i=:l-
imgn=drawline(imgn,x(i),y(i),x(i+),y(i+));
end imshow(imgn)

hilbert.m

function [x,y] = hilbert(n)
%HILBERT Hilbert curve.
%
% [x,y]=hilbert(n) gives the vector coordinates of points
% in n-th order Hilbert curve of area .
%
% Example: plot of -th order curve
%
% [x,y]=hilbert();line(x,y)
% % Copyright (c) by Federico Forte
% Date: // if n<=
x=;
y=;
else
[xo,yo]=hilbert(n-);
x=.*[-.+yo -.+xo .+xo .-yo];
y=.*[-.+xo .+yo .+yo -.-xo];
end

drawline.m

function img=drawline(img,x1,y1,x2,y2)   %因为图像坐标和数学函数坐标y轴朝向相反,所以这里所有y变量取相反数
y1=-y1;
y2=-y2; if x1~=x2
k=(y2-y1)/(x2-x1);
b=y1-k*x1; mi=min(x1,x2);
ma=max(x1,x2);
for i=mi:ma
img(-round(i*k+b),i)=;
end
end if y1~=y2
k=(x2-x1)/(y2-y1);
b=x1-k*y1;
mi=min(y1,y2);
ma=max(y1,y2);
for i=mi:ma
img(-i,round(i*k+b))=;
end
end end

matlab练习程序(生成希尔伯特曲线)的更多相关文章

  1. matlab练习程序(贝塞尔曲线)

    下面三个公式分别是一次.二次和三次贝塞尔曲线公式: 通用的贝塞尔曲线公式如下: 可以看出,系数是由一个杨辉三角组成的. 这里的一次或者二次三次由控制点个数来决定,次数等于控制点个数-1. 实现的效果如 ...

  2. hihocoder1322希尔伯特曲线(163周)

    hihocoder1322 : 希尔伯特曲线(163周) 题目链接 思路: 看图,对每个Hn迭代到H(n-1) 直到迭代到1就ok,判断在哪个区间就好了.一定一定要注意数据的范围!! ac代码: // ...

  3. 希尔伯特曲线——第八届蓝桥杯C语言B组(国赛)第三题

    原创 标题:希尔伯特曲线 希尔伯特曲线是以下一系列分形曲线 Hn 的极限.我们可以把 Hn 看作一条覆盖 2^n × 2^n 方格矩阵的曲线,曲线上一共有 2^n × 2^n 个顶点(包括左下角起点和 ...

  4. matlab练习程序(SUSAN检测)

    matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...

  5. (转)matlab练习程序(HOG方向梯度直方图)

    matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...

  6. opencv —— approxPolyDP 生成逼近曲线

    生成逼近曲线:approxPolyDP 函数 该函数采用 Douglas-Peucker 算法(也称迭代终点拟合算法).可以有效减少多边形曲线上点的数量,生成逼近曲线,简化后继操作. 经典的 Doug ...

  7. FDDB人脸检测数据集 生成ROC曲线

    看了好多博客,踩了很多坑,终于把FDDB数据集的ROC曲线绘制出来了.记录一下. 环境:ubuntu18.04 1.数据集准备 去FDDB官网:http://vis-www.cs.umass.edu/ ...

  8. matlab练习程序(生成黑白网格)

    提供了两种生成方法,一个是自己编程实现,比较灵活:另一个是调用系统的checkerboard函数,似乎只能生成8*8网格. 至于用途,也许可以用来下国际象棋. 自己函数生成: 系统函数生成: 代码如下 ...

  9. [Matlab绘图][三维图形][三维曲线基本函数+三维曲面+其他三维图形]

    1.绘制三维图形的基本函数 最基本的三维绘图函数为plot3: plot3与plot用法十分相似,调用格式: plot(x1,y1,z1,选项1,x2,y2,z2,选项2,...,xn,yn,zn,选 ...

随机推荐

  1. mongodb基础学习8-复制集

    今天来简单学习一下复制集(replication),什么是复制集呢,类似于mysql的主从复制吧 简单来说就是有多个mongodb的实例,多个实例有相同的内容,其中一台用于读写,其它用于备份,当用于读 ...

  2. Java静态初始化,实例初始化以及构造方法

    首先有三个概念需要了解: 一.静态初始化:是指执行静态初始化块里面的内容. 二.实例初始化:是指执行实例初始化块里面的内容. 三.构造方法:一个名称跟类的名称一样的方法,特殊在于不带返回值. 我们先来 ...

  3. pyplot绘图区域

    pyplot绘图区域 Matplotlib图像组成 matplotlib中,整个图像为一个Figure对象,与用户交互的整个窗口 Figure对象中包含一个或多个Axes(ax)子对象,每个ax子对象 ...

  4. post与get的区别

    GET请求在URL中传送的参数大多数浏览器限制该长度为2kb的,而POST没有. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息. GET参数通过URL传递,POST放 ...

  5. mysql允许远程登录

    Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作: 一.允许root用户在任何地方进行远程登录,并具有所有库 ...

  6. Loadrunner通过吞吐量计算每个用户需要的带宽

    Loadrunner通过吞吐量计算每个用户需要的带宽 运行一个场景,点击Analysis进行分析,使用分析报告中的Average Throughput(bytes/second)进行计算. 计算公式: ...

  7. Spring工作原理与单例

    最近看到spring管理的bean为单例的,当它与web容器整合的时候始终搞不太清除,就网上搜索写资料, Tomcat与多线程, servlet是多线程执行的,多线程是容器提供的能力. servlet ...

  8. JAVA序列化和反序列化 对象<=>IO流 对象<=>字节数组

    http://developer.51cto.com/art/201202/317181.htm http://blog.csdn.net/earbao/article/details/4691440 ...

  9. 判断Javascript对象是否为空

    判断普通javascript对象是否为空(含有可枚举的属性,自有的.继承的都可以),可使用jQuery 3.2.1版的isEmptyObject()方法: isEmptyObject: functio ...

  10. ios8 UITableView section不显示

    ios8 如果UITableView只设置viewForHeaderInSection,则可能section不能显示,iOS7及以下版本显示正常. 解决方案: 设置heightForHeaderInS ...