matlab 以中心为基准裁剪
时间: 2024-10-17 13:06:01 浏览: 39
在MATLAB中,如果你想要基于某个中心点裁剪一个图像或者矩阵(matrix),你可以使用`imcrop`函数结合数组索引来完成操作。假设你有一个名为`img`的二维图像数组,`centerPoint`是一个包含两个元素(行、列)的向量,表示你希望裁剪的中心位置,你可以这样做:
```matlab
% 假设img是需要裁剪的图像,centerPoint = [row, col]是中心坐标
cropped_img = imcrop(img, size(img)/2 + centerPoint); % 如果你想从中心开始等比例裁剪
cropped_img = img(centerPoint(1)-size(img,1)/2 : centerPoint(1)+size(img,1)/2, ... % 如果你想指定精确大小
centerPoint(2)-size(img,2)/2 : centerPoint(2)+size(img,2)/2);
```
这里的`size(img)/2`用于获取原始图像的一半作为默认裁剪边界,然后加上`centerPoint`偏移得到最终裁剪区域。如果想按照特定尺寸裁剪,可以直接指定新的行和列范围。
相关问题
matlab,将两幅tif格式的遥感图像QB和SV利用二次多项式进行配准,以QB为基准,SV向QB配准,并将配准后的影像进行裁剪到相同的大小,并且满足裁剪后两幅影像相同位置的像素地理坐标相同
以下是使用 MATLAB 进行遥感图像配准和裁剪的示例代码:
```matlab
% 读取原始遥感图像
QB = imread('QB.tif');
SV = imread('SV.tif');
% 对图像进行二次多项式配准
tform = imregtform(SV, QB, 'affine', optimizer, metric);
SV_registered = imwarp(SV, tform, 'OutputView', imref2d(size(QB)));
% 获取配准后的影像的像素地理坐标
R_QB = worldfileread('QB.tfw');
R_SV = worldfileread('SV.tfw');
R_SV_registered = R_QB;
% 计算裁剪区域
x_min = max([1 round(min([R_QB.XIntrinsicLimits R_SV_registered.XIntrinsicLimits]))]);
x_max = min([size(QB,2) round(max([R_QB.XIntrinsicLimits R_SV_registered.XIntrinsicLimits]))]);
y_min = max([1 round(min([R_QB.YIntrinsicLimits R_SV_registered.YIntrinsicLimits]))]);
y_max = min([size(QB,1) round(max([R_QB.YIntrinsicLimits R_SV_registered.YIntrinsicLimits]))]);
% 对两幅影像进行裁剪
QB_cropped = QB(y_min:y_max, x_min:x_max);
SV_registered_cropped = SV_registered(y_min:y_max, x_min:x_max);
% 保存裁剪后的影像
imwrite(QB_cropped, 'QB_cropped.tif');
imwrite(SV_registered_cropped, 'SV_registered_cropped.tif');
% 保存裁剪后的影像的像素地理坐标
R_QB_cropped = R_QB;
R_QB_cropped.XWorldLimits = R_QB.XWorldLimits(x_min:x_max);
R_QB_cropped.YWorldLimits = R_QB.YWorldLimits(y_min:y_max);
worldfilewrite(R_QB_cropped, 'QB_cropped.tfw');
worldfilewrite(R_SV_registered, 'SV_registered_cropped.tfw');
```
在代码中,我们首先读取原始遥感图像 QB 和 SV,并使用 `imregtform()` 函数对 SV 图像进行二次多项式配准,将其与 QB 图像配准。然后,我们使用 `worldfileread()` 函数读取 QB 和 SV 图像的像素地理坐标信息,并将配准后的影像的像素地理坐标设置为与 QB 图像相同。接下来,我们计算裁剪区域的四个边界,并使用裁剪区域对 QB 和 SV_registered 两幅影像进行裁剪。最后,我们使用 `imwrite()` 函数将裁剪后的影像保存到本地,并使用 `worldfilewrite()` 函数保存裁剪后的影像的像素地理坐标信息。
阅读全文