matlab练习程序(生成希尔伯特曲线)
能够使用这样一条线遍历图像中所有的像素,不过这里没有这样做,而只是生成了这样一条曲线。
程序中h,w是最终图像的高和宽,n为希尔伯特曲线阶数。
这里如果n等于log2(h)或log2(w),则图像就全为白了,也算是正好遍历所有像素了。
当然,n很大的话,图像也是全为白的,不过,那样不算正好遍历吧。
代码中生成曲线的核心函数可以在这里找到。
生成图像如下:
matlab代码如下:
main.m
clear all;close all;clc; h=256; w=256; n=5; imgn=zeros(h,w); [x,y]=hilbert(n); x=floor((x+0.5)*w)+1; y=floor((y+0.5)*h)+1; l=length(x); for i=1:l-1 imgn=drawline(imgn,x(i),y(i),x(i+1),y(i+1)); 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 1. % % Example: plot of 5-th order curve % % [x,y]=hilbert(5);line(x,y) % % Copyright (c) by Federico Forte % Date: 2000/10/06 if n<=0 x=0; y=0; else [xo,yo]=hilbert(n-1); x=.5*[-.5+yo -.5+xo .5+xo .5-yo]; y=.5*[-.5+xo .5+yo .5+yo -.5-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)=1; 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))=1; end end end
分类:
Matlab练习程序
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!