天道酬勤,学无止境

imread 如何缩放 12 位图像?(How does imread scale 12bit images?)

问题

我有一个 12 位的 pgm-image,我用 imread 读取。 结果是一个 16 位图像,其值在 0 到 2^16 - 1 的整个范围内。

Matlab 是如何缩放的? 将要

 X = imread('filename');
 X = uint16(double(X)*((2^12-1)/(2^16-1)));

恢复原来的强度?

回答1

MATLAB 确实正确加载了 PGM 12 位图像。 但是,在 MATLAB 加载图像后,图像值会从 12 位重新调整为 16 位。

MATLAB 使用以下算法将值从 12 位缩放到 16 位:

% W contains the the 12-bit data loaded from file. Data is stored in 16-bit unsigned integer
% First 4 bits are 0. Consider 12-bit pixel color value of ABC
% Then W = 0ABC
X = bitshift(W,4); % X = ABC0
Y = bitshift(W,-8); %Y = 000A
Z = bitor(X,Y); %Z = ABCA 
% Z is the variable that is returned by IMREAD.

解决方法是这样的

function out_image = imreadPGM12(filename)
out_image = imread(filename);
out_image = floor(out_image./16);
return

或者执行 4 位右移:

function out_image = imreadPGM12(filename)
out_image = imread(filename);
out_image = bitshift(out_image,-4);
return

可在此处找到更多信息:http://www.mathworks.com/matlabcentral/answers/93578-why-are-12-bit-pgm-images-scaled-up-to-16-bit-value-representation-in -image-processing-toolbox-7-10

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何在OpenCV中将16位转换为8位图像?(How to convert a 16 bit to an 8 bit image in OpenCV?)
    问题 我有一个16位的灰度图像,我想在OpenCV中将其转换为8位的灰度图像,以便python与各种功能(例如findContours等)一起使用。 是否可以在python中执行此操作,或者我必须切换到C ++? 回答1 您可以使用numpy转换方法,因为OpenCV垫是一个numpy数组。 这有效: img8 = (img16/256).astype('uint8') 回答2 您可以在Python中使用NumPy通过在查找表中映射图像来完成此操作。 import numpy as np def map_uint16_to_uint8(img, lower_bound=None, upper_bound=None): ''' Map a 16-bit image trough a lookup table to convert it to 8-bit. Parameters ---------- img: numpy.ndarray[np.uint16] image that should be mapped lower_bound: int, optional lower bound of the range that should be mapped to ``[0, 255]``, value must be in the range ``[0, 65535]`` and
  • Kinect Azure开发系列(一):深度图的获取及转换显示
    首先,图像的深度一般是16位的,因为8位的只能表示256个不同的深度值,分辨率太低.对于16位深度数据的显示 法1:16位可以直接转成8位的显示 depth_frame = cv::Mat(depthImage.get_height_pixels(), depthImage.get_width_pixels(), CV_16U, depthImage.get_buffer()); depth_frame.convertTo(depth_out, CV_8U, 1); 这种是直接将16位转成8位,然后,后面设置的是1,也就是低于255的不变,高于的全部转位255,数据的实际信息会丢失.如果设置为很大的值,数据丢失的会更大,详见参考资料中这个函数的原理. 法2: 16位归一化后显示 由于imshow只认0~255的数值,16位的数据可以归一化到0 ~255. depth_frame = cv::Mat(depthImage.get_height_pixels(), depthImage.get_width_pixels(), CV_16U, depthImage.get_buffer()); normalize(depth_frame, depth_out, 0, 256* 256, NORM_MINMAX); 显示结果 这里可以点开大图查看,左侧是归一化的结果,出现了很多浅灰色的值
  • How does imread scale 12bit images?
    I have a 12-bit pgm-image, which I read with imread. The result is a 16-bit image having values in the full range 0 to 2^16 - 1. How does Matlab scale? Will X = imread('filename'); X = uint16(double(X)*((2^12-1)/(2^16-1))); recover the original intensities?
  • 16bit转8bit图像(Python,简单易实现)
    前言  一些工业相机采集的图像是16位的,不方便进行图像处理。比如opencv处理的常常是8位灰度图像,而深度学习模型输入图像也往往是单通道或者三通道的。因此,对16位图像做位深度转换,从而方便后续的一系列操作,是很有必要的!  本文主要介绍用opencv+numpy实现16位图像转8位图像,做法是线性缩放 线性缩放 基本原理:将16bit图像的动态范围映射到0-255公式: matrix_16: 16bit图像矩阵 min: 16bit图像动态范围最小值 max: 16bit图像动态范围最大值 matrix_8: 8bit图像矩阵 matrix_8=255.0∗(matrix_16 - min)/(max - min)代码实现 import cv2 import numpy as np def transfer_16bit_to_8bit(image_path): image_16bit = cv2.imread(image_path, cv2.IMREAD_UNCHANGED) min_16bit = np.min(image_16bit) max_16bit = np.max(image_16bit) # image_8bit = np.array(np.rint((255.0 * (image_16bit - min_16bit)) / float(max_16bit -
  • OpenCV——图像梯度与边缘检测(python实现)
    OpenCV——图像梯度与边缘检测 6.1 简介 严格的说,梯度计算需要求导数。但是图像梯度的计算,是通过计算像素值的差得到梯度的近似值。图像梯度表示的是图像变化的速度,反映了图像的边缘信息。 边缘是像素值快速变化的地方。所以对于图像的边缘部分,其灰度值变化较大,梯度值也较大;对于图像中较平滑的部分,其灰度值变化较小,梯度值也较小。 为了检测边缘,我们需要检测图像中的不连续性,可以使用图像梯度来检测不连续性。 但是,图像梯度也会受到噪声的影响,因此建议先对图像进行平滑处理。 6.2 学习目标 掌握图像梯度与几种算子的原理掌握Canny边缘检测的原理 6.3 内容介绍 图像梯度与Sobel算子Canny边缘检测介绍OpenCV代码实践 6.4 算法理论介绍与推荐 6.4.1 图像梯度与几种算子 “滤波器”也可以称为“卷积核”,“掩膜”,“算子”等。 1、Sobel算子 Sobel算子是一个 3 × 3 3×3 3×3的卷积核,利用局部差分寻找边缘,计算得到梯度的近似值。 x和y方向的Sobel算子分别为: G x = [ − 1 0 1 − 2 0 2 − 1 0 1 ] G y = [ − 1 − 2 − 1 0 0 0 1 2 1 ] Gx=\begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2\\ -1 & 0 & 1 \end{bmatrix}\\
  • 使用 Scipy imsave 将 Numpy 数组保存到图像时保留未更改的数据(Retain unchanged data when saving Numpy array to image with Scipy imsave)
    问题 当使用 Scipy toimage或imsave保存二维 Numpy 数组(单个值)时,像素值与 Numpy 数组中的像素值不完全匹配。 相反,有一些区域,主要是在边缘,图像算法似乎使用了某种插值。 是否有一个选项可以停止该插值并保留确切的数据(例如 7 总是在 PNG 中获取 rgb(7,7,7)? 回答1 如果您有一个 2D numpy 数组,那么您将保存为灰度 PNG,因此您永远不会获得 rgb 图像(只有一个通道)。 我不确定您所说的单值是什么意思,也许是单精度浮点数? 尽管 PIL 支持单精度浮点数,但 PNG 不支持。 保存为 PNG,您可以使用每通道 8 位(默认)或每通道 16 位。 这意味着您的数组将被缩放到最大 2^8/2^16(8/16 位),并转换为整数。 正是在这种转换中,结果可能会略有不同。 使用scipy.misc.image似乎没有选项可以保存为 16 位,因此它总是会写入 8 位 PNG。 但是您可以使用scipy.misc.toimage来创建一个 16 位图像,只需确保传递mode='I' 。 还要确保指定数组 min 和 max 以避免缩放。 以下是如何使用它来保存 16 位 png: import numpy as np import scipy.misc a = np.random.uniform(0, 2**16 - 1,
  • Python:读写TIFF 16位,三通道,彩色图像(Python: Read and write TIFF 16 bit , three channel , colour images)
    问题 有没有人有一种方法可以在Python中导入每通道16位,3通道TIFF图像? 我还没有找到一种在处理TIFF格式时可以保留每个通道16位深度的方法。 我希望一些乐于助人的人能够解决。 这是到目前为止我没有成功尝试过的结果以及结果的列表: import numpy as np import PIL.Image as Image import libtiff import cv2 im = Image.open('a.tif') # IOError: cannot identify image file tif = libtiff.TIFF.open('a.tif') im = tif.read_image() # im only contains one of the three channels. im.dtype is uint16 as desired. im = [] for i in tif.iter_images(): # still only returns one channel im = np.array(cv2.imread('a.tif')) # im.dtype is uint8 and not uint16 as desired. # specifying dtype as uint16 does not correct this 到目前为止
  • OpenCV:处理 12 位灰度原始数据(OpenCV: Working with 12bit gray scale raw data)
    问题 过去我曾使用 OpenCv 处理 32 位 .bmp 文件,并取得了成功的结果。 如何使用 Opencv 函数处理12 位原始数据? 我的处理将主要是一些操作,比如找到 1000 个像素中的一些等等。 编辑我得到的文件是 .bin 文件。 图像中的像素是这样放置的(文件中的所有内容都是这样的,因为我正在拍一张白纸): (FF)(0F)(FF)(0F)(FF)(0F)(FF)(0F)(FF)(0F)(FF)(0F)(FF)(0F) 显然我可以对此进行 16 位处理。 回答1 好吧,我想对这个图像进行 16 位处理。 秘密然后陶醉在另一个问题中。 对于 16 位,我将不得不切换到 PNG 而不是 bmp! 该文档说我可以在 OpenCV 中使用 16 位 PNG 回答2 据我所知,OpenCV 只能正确处理 8、16 和 32 位图像。 取决于你想做什么,你应该 要么将您的 12 位图像转换为 8 位(假设它是 12 位拜耳编码图像) 或通过用零填充值手动将其转换为 16。 从我在这里找到的,这可能已经在你的图像上完成了。 我建议你在做任何事情之前仔细看看你的像素是如何准确地放置在你的图像中的。 这将极大地帮助您了解什么是最好的。 一个很好的方法是使用 bless 或其他十六进制编辑器 编辑: 取自here,您的数据(我认为)使用填充编码超过 16 位 只需使用 Opencv 从
  • OpenCV-读取16位灰度图像(OpenCV - Reading a 16 bit grayscale image)
    问题 我正在尝试在Python中使用OpenCV 2.4读取16位灰度图像,但似乎正在将其加载为8位。 我正在做: im = cv2.imread(path,0) print im [[25 25 28 ..., 0 0 0] [ 0 0 0 ..., 0 0 0] [ 0 0 0 ..., 0 0 0] ..., 如何获得16位? 回答1 弄清楚了。 万一其他人遇到这个问题: im = cv2.imread(path,-1) 将标志设置为0,以灰度加载似乎默认为8位。 设置为-1将按原样加载图像。 回答2 为了提高可读性,请使用标志cv2.IMREAD_ANYDEPTH image = cv2.imread( path, cv2.IMREAD_ANYDEPTH ) 回答3 我遇到了同样的问题(使用cv2.imread将16位.tif加载为8位)。 但是,使用-1标志没有帮助。 相反,我能够使用tifffile包加载16位图像。
  • 【OpenCV3编程入门学习笔记】——第3章 HighGUI图形用户界面初步
    文章目录 前言3.1 图形的载入、显示和输出到文件3.1.1 OpenCV的命名空间3.1.2 Mat类简析3.1.3 图像的载入与显示概述3.1.4 图像的载入:imread()函数3.1.5 图像的显示:imshow()函数3.1.6 关于InputArray类型3.1.7 创建窗口:namedWindow()函数3.1.8 输出图像到文件:imwrite()函数3.1.9 综合示例程序:图像的载入、显示与输出 3.2 滑动条的创建和使用3.2.1 创建滑动条:createTrackbar()函数3.2.2 获取当前轨迹条的位置:getTrackbarPos()函数 3.3 鼠标操作3.4 本章小结 前言 笔记系列 参考书籍:OpenCV3编程入门 作者:毛星云 版权方:电子工业出版社 出版日期:2015-02 笔记仅供本人参考使用,不具备共通性 笔记中代码均是OpenCV+Qt的代码,并非用vs开发,请勿混淆 HighGUI模块为高层GUI图形用户界面模块 它的功能包括 媒体的输入输出视频捕捉图像和视频的编码解码图形交互界面的接口… 3.1 图形的载入、显示和输出到文件 OpenCV1.0时代的基于C语言接口而建的图像存储格式IplImage*十分不好用进入到2.0时代后,OpenCV采用了Mat类作为数据结构进行图像存取 此改进使得OpenCV变得容易上手和用于实际开发 3
  • 【图像处理】——opencv常用函数
    目录 读取图像 注意: 1、imread和plt.show以及pil.image,show的区别: 2、imread中的rgb的顺序 显示图像 等待键盘输入 销毁窗口 保存一张图像 图像复制 图像颜色空间转换(灰彩互转) 图像缩放 图像旋转 图像放射变换 图像添加文字 在图像上绘制矩形 图像的四值属性 读取图像 cv2.imread(filepath,flags) #读入一张图像,这里读入得到的是一个三维矩阵(h,w,α),h和w表示的是图片的大小(像素格式),α表示的是颜色通道,彩色为3,黑白为1,一般黑白图片就没有这一维,矩阵的元素值是每一个像素点的RBG值 filepath:要读入图片的完整路径 flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道 cv2.IMREAD_GRAYSCALE:读入灰度图片 cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道 注意: 1、imread和plt.show以及pil.image,show的区别: 都是通过读取以下图片得到的结果 imread:是以像素格式进行读取的,通过imshow呈现的是通过像素格子按照一比一的比例在电脑上呈现出来的,若图片的像素很大,甚至大于电脑屏幕的时候,图片就会溢出屏幕,即看不到图片的全貌 plt.show()
  • OpenCV 的 Sobel 过滤器 - 为什么它看起来如此糟糕,尤其是与 Gimp 相比?(OpenCV's Sobel filter - why does it look so bad, especially compared to Gimp?)
    问题 我正在尝试使用 OpenCV 重建我之前在 Gimp 中完成的一些预处理。 第一阶段是用于边缘检测的 Sobel 滤波器。 它在 Gimp 中运行良好: 现在这是我对 OpenCV 的尝试: opencv_imgproc.Sobel(/* src = */ scaled, /* dst = */ sobel, /* ddepth = */ opencv_core.CV_32F, /* dx = */ 1, /* dy = */ 1, /* ksize = */ 5, /* scale = */ 0.25, /* delta = */ 0.0, /* borderType = */ opencv_core.BORDER_REPLICATE) 它看起来很糟糕,基本上是突出点而不是轮廓: 那么我做错了什么,或者 Gimp 是如何取得如此好的结果以及我如何在 OpenCV 中复制它? 回答1 信息 图片来自 https://www.pexels.com/photo/brown-wooden-flooring-hallway-176162/(“免费供个人和商业使用”)。 解决方案 TL;DR 通过 Sobel 滤波器进行边缘检测需要两个单独的滤波器操作。 它不能一步完成。 两个单独步骤的结果必须结合起来形成边缘检测的最终结果。 信息:为简单起见,我使用浮动图像(CV_32F) 。
  • 我可以使用“ normal”(有思想的)python将numpy数组另存为16位图像吗?(Can I save a numpy array as a 16-bit image using “normal” (Enthought) python?)
    问题 是否有任何方法可以使用任何常用的python软件包将numpy数组另存为16位图像(tif,png)? 这是我过去可以使用的唯一方法,但是我需要安装FreeImage软件包,这有点烦人。 这似乎是一个非常基本的任务,所以我希望它应该被scipy覆盖,但是scipy.misc.imsave只执行8位。 有任何想法吗? 回答1 一种替代方法是使用pypng。 您仍然必须安装另一个软件包,但这是纯Python,因此应该很容易。 (pypng源中实际上有一个Cython文件,但其使用是可选的。) 这是使用pypng将numpy数组写入PNG的示例: import png import numpy as np # The following import is just for creating an interesting array # of data. It is not necessary for writing a PNG file with PyPNG. from scipy.ndimage import gaussian_filter # Make an image in a numpy array for this demonstration. nrows = 240 ncols = 320 np.random.seed(12345) x = np.random
  • 调整大小/缩放位图后图像质量差(Bad image quality after resizing/scaling bitmap)
    问题 我正在写纸牌游戏,在不同情况下需要我的纸牌尺寸不同。 我将图像存储为位图,以便可以快速绘制和重绘(用于动画)。 我的问题是,无论我如何尝试缩放图像(无论是通过matrix.postScale,matrix.preScale还是createScaledBitmap函数),它们总是像素化且模糊。 我知道这是导致问题的缩放比例,因为绘制图像时无需调整大小即可看起来完美。 我已经研究了以下两个线程中描述的每个解决方案: android质量的图像在运行时调整在运行时调整图像大小时出现质量问题 但仍然没有到达任何地方。 我使用以下代码存储位图(到哈希表中): cardImages = new HashMap<Byte, Bitmap>(); cardImages.put(GameUtil.hearts_ace, BitmapFactory.decodeResource(r, R.drawable.hearts_ace)); 并使用此方法绘制它们(在Card类中): public void drawCard(Canvas c) { //retrieve the cards image (if it doesn't already have one) if (image == null) image = Bitmap.createScaledBitmap(GameUtil
  • 在运行时调整图像大小时出现质量问题(Quality problems when resizing an image at runtime)
    问题 我的磁盘上有一个映像文件,我正在调整文件大小并将其作为新的映像文件保存回磁盘。 出于这个问题,我并不是为了将它们显示在屏幕上而将它们带入内存中,而只是为了调整它们的大小并重新保存它们。 这一切都很好。 但是,缩放后的图像上会出现伪像,如下所示:android:运行时调整大小的图像质量 由于存在这种失真,因此可以保存它们,因为我可以将它们从磁盘中拉出并在计算机上查看它们,但它们仍然存在相同的问题。 在将图像加载到Bitmap对象以将位图解码到内存时,我正在使用类似于此内存不足问题的代码: BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(imageFilePathString, options); int srcWidth = options.outWidth; int srcHeight = options.outHeight; int scale = 1; while(srcWidth / 2 > desiredWidth){ srcWidth /= 2; srcHeight /= 2; scale *= 2; } options.inJustDecodeBounds = false
  • C++ OpenCV4.5 图像边缘检测Sobel、Laplance和Canny(十二)
    系列文章目录 C++ OpenCV4.5环境搭建(一) C++ OpenCV4.5常用API查询手册(二) C++ OpenCV4.5 图像处理(三) C++ OpenCV4.5 绘制形状与文字(四) C++ OpenCV4.5 图像模糊(五) C++ OpenCV4.5 项目实战一(六) C++ OpenCV4.5 形态学操作(七) C++ OpenCV4.5 调整图像亮度的几种方法(八) C++ OpenCV4.5 图像金字塔和图像阈值(九) C++ OpenCV4.5 图像的部分处理操作(十) C++ OpenCV4.5 卷积运算和卷积边缘处理(十一) 文章目录 系列文章目录前言一、Sobel算子1.卷积应用-图像边缘提取2.Sobel算子3.示例代码 二、Laplance算子1.相关概念2.处理步骤3.相关API4.示例代码 三、Canny边缘检测1.算法介绍2.1 处理步骤2.2 非最大信号抑制2.3 高低阈值输出二值图像 3.相关API4.示例代码 前言 该篇主要讲述 Sobel 算子、Laplance 算子和 Canny 算法 一、Sobel算子 1.卷积应用-图像边缘提取 1. 边缘是像素值发生跃迁的地方,是图像的显著特征之一,在图像特征提取、对象检测、模式识别等方面都有重要的作用; 2. 如何捕捉/提取边缘 – 对图像求它的一阶导数 delta = f(x) –
  • 如何在Android中调整位图的大小?(How to Resize a Bitmap in Android?)
    问题 我从我的远程数据库中获取了一个Base64字符串的位图,( encodedImage是表示使用Base64的图像的字符串): profileImage = (ImageView)findViewById(R.id.profileImage); byte[] imageAsBytes=null; try { imageAsBytes = Base64.decode(encodedImage.getBytes()); } catch (IOException e) {e.printStackTrace();} profileImage.setImageBitmap( BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length) ); profileImage是我的ImageView 好的,但是在将其显示在布局的ImageView上之前,我必须调整其大小。 我必须将其尺寸调整为120x120。 有人可以告诉我调整大小的代码吗? 我发现的示例无法应用于获得的base64字符串位图。 回答1 改变: profileImage.setImageBitmap( BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length) 到: Bitmap b
  • 【图像检索】基于 Hu不变矩图像检索matlab源码
    一、简介 几何矩是由Hu(Visual pattern recognition by moment invariants)在1962年提出的,具有平移、旋转和尺度不变性。 这7个不变矩构成一组特征量,Hu.M.K在1962年证明了他们具有旋转,缩放和平移不变性。 实际上,在对图片中物体的识别过程中,只有 和 不变性保持的比较好,其他的几个不变矩带来的误差比较大,有学者认为只有基于二阶矩的不变矩对二维物体的描述才是真正的具有旋转、缩放和平移不变性( 和 刚好都是由二阶矩组成的)。不过我没有证明是否是真的事这样的。 由Hu矩组成的特征量对图片进行识别,优点就是速度很快,缺点是识别率比较低,我做过手势识别,对于已经分割好的手势轮廓图,识别率也就30%左右,对于纹理比较丰富的图片,识别率更是不堪入眼,只有10%左右。这一部分原因是由于Hu不变矩只用到低阶矩(最多也就用到三阶矩),对于图像的细节未能很好的描述出来,导致对图像的描述不够完整。 Hu不变矩一般用来识别图像中大的物体,对于物体的形状描述得比较好,图像的纹理特征不能太复杂,像识别水果的形状,或者对于车牌中的简单字符的识别效果会相对好一些。 定义如下: ① (p+q)阶不变矩定义: ② 对于数字图像,离散化,定义为: ③ 归一化中心矩定义: ④Hu矩定义 二、源代码 clc; clear all; close all; warning
  • 如何使用OpenCV Python库从内存缓冲区(StringIO)或url中读取图像(How to read image from in memory buffer (StringIO) or from url with opencv python library)
    问题 只需分享一种从内存缓冲区或url创建opencv图像对象的方法即可提高性能。 有时候,我们从URL获得图像二值,以避免额外的文件IO,我们想从内存缓冲或网址imread这一形象,但imread仅支持从文件系统读取的图像与路径。 回答1 要在内存缓冲区(StringIO)中创建一个OpenCV图像对象,我们可以使用OpenCV API imdecode,请参见下面的代码: import cv2 import numpy as np from urllib2 import urlopen from cStringIO import StringIO def create_opencv_image_from_stringio(img_stream, cv2_img_flag=0): img_stream.seek(0) img_array = np.asarray(bytearray(img_stream.read()), dtype=np.uint8) return cv2.imdecode(img_array, cv2_img_flag) def create_opencv_image_from_url(url, cv2_img_flag=0): request = urlopen(url) img_array = np.asarray(bytearray(request
  • 在MATLAB中匹配具有不同方向和比例的图像(Matching images with different orientations and scales in MATLAB)
    问题 我有两张相似但方向和大小不同的图像。 下面是一个示例: 有没有办法匹配两个图像? 我已经使用了Procrustes形状分析,但是还有其他方法吗? 回答1 在Computer Vision System Toolbox中查看使用自动特征匹配查找图像旋转和缩放示例。 它显示了如何检测兴趣点,提取和匹配特征描述符以及如何计算两个图像之间的转换。 回答2 这是一些可以帮助您入门的东西。 您要的是一个经典的问题,称为图像配准。 图像配准试图找到拍摄一张图像并将其与另一张图像对齐的正确单应性。 这涉及找到两个图像之间共有的兴趣点或关键点,并确定两个图像之间匹配的关键点。 一旦有了这些成对的点,就可以确定单应矩阵并扭曲其中一个图像,以使这些图像与另一个矩阵对齐。 我将假设您具有MATLAB的一部分的计算机视觉和图像处理工具箱。 如果您不这样做,那么Maurits给出的答案是一个很好的选择,而VLFeat Toolbox是我也使用过的答案。 首先,让我们直接从StackOverflow中读取图像: im = imread('http://i.stack.imgur.com/vXqe8.png'); im2 = imread('http://i.stack.imgur.com/Pd7pt.png'); im_gray = rgb2gray(im); im2_gray = rgb2gray