当前位置: 首页 > news >正文

如何在Python中创建测试图像

原文地址:https://medium.com/@itberrios6/how-to-make-a-test-image-in-python-1a6c2d41b6ab

学习如何制作测试图像

在计算机视觉和图像处理中,创建测试图像以更好地了解算法或滤波器将如何执行通常是有用的。测试图像是一个基准,可以将多种算法相互比较。让我们开始吧,代码位于GitHub上。

简单测试图像

通过skimage可以轻松获得许多测试图像,但它们通常不适合描述算法和滤波器。相反,我们的目标是描述更简单的图像上的算法,我们将重点使用numpy和opencv创建旋转对称的测试图像。首先我们将制作一个简单的测试图像,然后我们将使用正弦函数制作一个更复杂的图像。

import numpy as np import cv2 import matplotlib.pyplot as plt %matplotlib inline # size of NxN image n = 512 # get test image of a circle test_image = np.zeros((n, n)) cv2.circle(test_image, center=(n//2, n//2), radius=n//3, color=(255,), thickness=-1) # OPTIONAL: blurr test image cv2.GaussianBlur(test_image, ksize=(9,9), sigmaX=11, dst=test_image) # 0-1 normalize and cast to float32 cv2.normalize(test_image, test_image, 0, 1, cv2.NORM_MINMAX, dtype=cv2.CV_32FC1) # display plt.imshow(test_image) plt.title("Test Image");
Figure 1.在暗背景上测试一个圆的图像

你可能想知道为什么我们要使用模糊,原因是让圆的边界逐渐归零,而不是粗略地下降。

Figure 2.简单测试图像的截面。

你可以使用opencv的形状函数尝试更简单的测试图像,现在让我们实现一个更复杂的测试图像。

复杂测试图像

这是一个快速的复杂测试函数,我们将使用正弦函数创建一个半径为r的圆对称波纹函数。其中半径定义为到原点的距离。

def f(r): """ r - is the Radius from the center """ outputs = r.copy().astype(np.float32) index = (r > 56) & (r <= 256) outputs[r <= 56] = 127 outputs[index] = 127*np.sin(r[index]/np.pi) outputs[r > 256] = 127 return outputs # get images indexes as column vectors x_index, y_index = np.meshgrid(np.arange(0, N), np.arange(0, N)) x_index = x_index.reshape((-1, 1)) y_index = y_index.reshape((-1, 1)) # get radius r r = np.round(np.sqrt((x_index - N//2)**2 + (y_index - N//2)**2)).astype(int).squeeze() test_image f(r).reshape((N, N))
Figure 3. 正弦测试图像
Figure 4. 正弦图像的横截面

简单的正弦测试图像为我们提供了更有趣的特征,但实际上我们可以生成更鲁棒的东西。代码如下:

g = lambda r : np.sin(((112*np.pi)/(np.log(2))*((2**(-r/56))) - 2**(-256/56))) def f(r): """ r - is the Radius from the center """ outputs = r.copy() index_1 = (r > 56) & (r <= 64) index_2 = (r > 64) & (r <= 224) index_3 = (r > 224) & (r <= 256) outputs[r < 56] = 127 outputs[index_1] = 127*(1 + (g(r[index_1]) * np.cos((np.pi*r[index_1]/16) - 4*np.pi)**2)) outputs[index_2] = 127*(1 + g(r[index_2])) outputs[index_3] = 127*(1 + (g(r[index_3]) * np.sin((np.pi*r[index_3]/64) - 4*np.pi)**2)) outputs[r > 256] = 127 return outputs def get_test_image(N): """ Obtains an NxN test image """ # get image indexes as column vectors x_index, y_index = np.meshgrid(np.arange(0, N), np.arange(0, N)) x_index = x_index.reshape((-1, 1)) y_index = y_index.reshape((-1, 1)) # get radius r r = np.round(np.sqrt((x_index - N//2)**2 + (y_index - N//2)**2)).astype(np.float32).squeeze() return f(r).reshape((N, N)) # get size n = 512 # get sinusoidal test image test_image = get_test_image(n).astype(np.float32) # OPTIONAL blurr test image # cv2.GaussianBlur(test_image, ksize=(5,5), sigmaX=3, dst=test_image) # 0-1 normalize cv2.normalize(test_image, test_image, 0, 1, cv2.NORM_MINMAX, dtype=cv2.CV_32FC1) # display plt.imshow(test_image) plt.title("Test Image");
Figure 5.复正弦测试图像
Figure 6. Cross Section of Complex Sinusoidal Test Image.

现在我们有了一个具有不同波峰和波谷的测试图像,用于比较我们的算法或滤波器的性能。这些并不是随机的峰值和低谷,它们代表了图像中受控的频率变化。中心平坦,无频率变化(也称为直流)。当我们从中心出去时,我们参与了一个非常高的频率区域,在频率上逐渐减少,一直到边缘。为什么控制频率变化很重要?它允许我们测量滤波器的一般频率响应,而无需明确进入频域。

具有已知频率变化的图像允许我们在不转换到频率空间的情况下测量频率响应

除了正弦函数f和g,我们还可以使用模糊来控制峰值和谷值的强度。希望这能让你对创建自己的测试函数有一些了解,以便将来使用。

References

[1] Granlund, G. H., & Knutsson, H. (2011).Signal Processing for Computer Vision. Springer.

http://www.jsqmd.com/news/863807/

相关文章:

  • RedisBloom性能优化10个技巧:让你的概率数据结构运行更快
  • QMC解密工具性能深度解析:为什么这是最快的音频格式转换神器
  • LRCGET:如何一键批量下载本地音乐歌词的终极指南
  • OpenClaw的具体配置示例
  • 洛阳酱牛肉推荐哪家?对比多家后,这家本土品牌性价比和品质双拔尖 - 中媒介
  • CargoBay社区贡献指南:如何在停止维护的项目中找到价值
  • 2026年靠谱的柔性大门供应商品牌推荐 - 速递信息
  • Office Custom UI Editor:5分钟打造你的专属Office工作台,效率提升40%
  • Mapbox Unity SDK 3.0深度解析:5步构建专业级地图应用的完整指南
  • 如何在Android应用中快速集成Material Design风格的文件选择器
  • 毫米级精准不复杂!YOLO26 姿态模型在前臂解剖点检测的对比研究
  • Sheeeeeeeeet自定义扩展指南:创建你自己的菜单项类型
  • 扬州GEO优化怎么选不踩坑?5大核心维度+避坑指南,新手必看 - GEO排行榜
  • 测试Agent间通信是否成功
  • Windows 11任务栏歌词插件:让音乐与系统界面完美融合
  • 终极指南:使用elan轻松管理Lean定理证明器版本 [特殊字符]
  • 余生黄金回收领衔!郑州7家黄金回收实测,差价差出一部手机 - 润富黄金珠宝行
  • Gramophone小部件开发:歌词显示组件的实现原理
  • 如何高效汉化Kirikiri引擎视觉小说游戏:完整工具指南
  • Unitree Mujoco仿真器:机器人开发的终极仿真解决方案
  • CANN/asc-devkit int32转int16函数
  • 掌握专业级性能测试:Phoronix Test Suite 跨平台评测工具实践指南
  • 沈阳东展机电设备:沈阳uPs电源车出租公司 - LYL仔仔
  • 别再用土办法改论文了!书匠策AI官网www.shujiangce.com才是2025届毕业生的“通关密码“
  • Carnac键盘可视化工具:让屏幕录制和教学演示更专业的终极指南
  • 工业防爆监控技术解析与辽宁场景选型实践
  • Windows字体自定义终极指南:No!! MeiryoUI完整解决方案
  • LaMa图像修复完整教程:用AI技术轻松移除图片中的任何物体
  • 宜昌黄金回收门店推荐 2026年5月六家正规回收店价格全览 优选长悦 - 专业黄金回收
  • 无人机航拍小目标车辆检测太难?LMAD‑YOLO 一招搞定精度与速度!