MATLAB图像处理:几何变换详解(裁剪、旋转、缩放)

devtools/2025/2/21 7:55:21/

图像几何变换是图像处理的基础操作,适用于图像增强、数据增强(深度学习)、目标检测等场景。本文将详细讲解 图像裁剪(ROI提取)旋转(角度调整)缩放(尺寸调整) 的实现方法,并提供 MATLAB 代码示例和常见问题解决思路。

1. 图像裁剪:精准提取感兴趣区域 (ROI)

图像裁剪通过截取图像的某一部分,聚焦关键区域,减少无关信息的干扰。

1.1 手动交互框选

使用 imcrop 函数直接交互式选择区域:

img = imread('peppers.png');
figure; imshow(img);
cropped_img = imcrop;  % 鼠标框选区域后自动确认
figure; imshow(cropped_img);

1.2 坐标编程裁剪

指定矩形区域的左上角坐标和宽高:

% 裁剪位置:(x_min, y_min),宽度 width,高度 height
x_min = 100; y_min = 50; 
width = 200; height = 150;
rect = [x_min, y_min, width, height];  
cropped_program = imcrop(img, rect); 

注意点:

  • MATLAB 图像的坐标原点在左上角,x 为列方向,y 为行方向。
  • 裁剪区域须在图像范围内(可通过 size(img) 获取图像尺寸

2. 图像旋转:角度调整与无黑边处理

图像旋转常用于校正拍摄角度偏差或生成数据增强样本。

2.1 基本旋转:指定角度与插值方法
% 参数说明:
% img: 输入图像
% 45: 旋转角度(正值为逆时针)
% 'bilinear': 双线性插值(其他选项:'nearest', 'bicubic')
% 'crop': 裁剪旋转后图像,维持原始尺寸
rotated_img = imrotate(img, 45, 'bilinear', 'crop');
figure; imshow(rotated_img);

2.2 消除黑边:自动填充或扩展图像

旋转后图像超出原图范围的区域默认填充黑色(0)。可通过以下方式优化:

  • 使用 'loose' 参数保留完整旋转结果

 

3. 图像缩放:智能调整大小

缩放操作改变图像分辨率,需要权衡清晰度与计算效率。常见场景如缩略图生成、适配显示设备。

3.1 固定比例缩放
scale_factor = 0.5;  % 缩小到原图的 50%
scaled_img = imresize(img, scale_factor); 

3.2 指定目标尺寸
target_size = [300, 400];  % [行数, 列数]
scaled_target = imresize(img, target_size); % 保持宽高比(根据宽度自适应高度)
target_width = 200; 
[height, width, ~] = size(img);
scaled_fixed_width = imresize(img, [NaN, target_width]);  % NaN 表示自动计算

3.3 插值方式对比
  • 'nearest' 最近邻插值:速度快,但锯齿明显。
  • 'bilinear' 双线性插值:平滑效果较好(默认)。
  • 'bicubic' 双三次插值:更精细,但计算量大。
% 对比不同缩放的模糊程度
scaled_nearest = imresize(img, 0.2, 'nearest');
scaled_bicubic = imresize(img, 0.2, 'bicubic');
montage({scaled_nearest, scaled_bicubic}, 'Size', [1 2]);

 

操作核心函数关键参数适用场景
裁剪imcrop坐标或交互框提取重点区域
旋转imrotate角度、插值方法方向校正
缩放imresize缩放因子、目标尺寸分辨率调整

http://www.ppmy.cn/devtools/160311.html

相关文章

Open-WebUI官方部署文档

Github地址:GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 打开 WebUI 👋 如果你是零基础的小白,不知道什么是DeepSeek的话?不知道如何本地化部署,我强烈建议先看…

个人搭建CDN加速服务 特网科技

在互联网快速发展的今天,网站的加载速度对用户体验有着至关重要的影响,传统的网页加载方式依赖于服务器的性能和网络环境,这使得某些网站的页面加载时间过长,用户体验不佳,为了解决这个问题,许多企业开始采…

城市大脑觉醒:AI如何编织未来城市的“神经网络“

城市大脑觉醒:AI如何编织未来城市的"神经网络" (本文共1420字,阅读约需4分钟) 凌晨三点的城市控制中心大屏上,交通、能源、安防等30个系统的数据洪流在此交汇。当AI开始自主调整红绿灯节奏时,值班工程师老张突然意识到:这座城市正在长出"自主神经"…

【Unity动画】导入动画资源到项目中,Animator播放角色动画片段,角色会跟随着动画播放移动。

导入动画资源到项目中,Animator播放角色动画片段,角色会跟随着动画播放移动,但我只想要角色在原地播放动画。比如:播放一个角色Run动画,希望角色在原地奔跑,而不是产生了移动距离。 问题排查: 1.是否勾选…

【网络安全 | 漏洞挖掘】我如何通过Cookie Manipulation发现主域上的关键PII?

未经许可,不得转载。 文章目录 正文正文 在分析 Example.com 的认证机制时,我注意到一个特定的 cookie,USER_ID,包含了一个具有预测性的会话标识符,其格式为: USER_ID="VYCVCDs-TZBI:XXXX-random-data"其中,XXXX 是由四个大写字母组成的部分,我使用 Burp S…

c/c++蓝桥杯经典编程题100道(22)最短路径问题

最短路径问题 ->返回c/c蓝桥杯经典编程题100道-目录 目录 最短路径问题 一、题型解释 二、例题问题描述 三、C语言实现 解法1:Dijkstra算法(正权图,难度★★) 解法2:Bellman-Ford算法(含负权边&a…

Webpack 基础入门

一、Webpack 是什么 Webpack 是一款现代 JavaScript 应用程序的静态模块打包工具。在 Web 开发中,我们的项目会包含各种类型的文件,如 JavaScript、CSS、图片等。Webpack 可以将这些文件打包成一个或多个文件,以便在浏览器中高效加载。它就像…

SOME/IP--协议英文原文讲解6

前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.1.4.4 S…