已知点坐标,在图像中截取以点为中心17*17大小的图像并将其他图像像素设为0,写出matlab代码
时间: 2024-03-17 16:40:26 浏览: 55
假设点的坐标为(x,y),图像名称为img,以下是matlab代码:
```matlab
% 点的坐标
x = 100;
y = 200;
% 图像读取
img = imread('your_image_path');
% 图像大小
height = size(img, 1);
width = size(img, 2);
% 截取图像
half_size = 8;
if x > half_size && y > half_size && x < width-half_size && y < height-half_size
sub_img = img(y-half_size:y+half_size, x-half_size:x+half_size, :);
else
sub_img = zeros(17, 17, size(img, 3));
end
% 显示图像
imshow(sub_img);
```
代码中,首先读取指定图像,然后计算出图像的大小。在截取图像的过程中,需要考虑到点的坐标是否越界,如果越界则将截取出的图像像素设为0。最后,将截取出的图像显示出来。
相关问题
已知多个点坐标,在图像中截取以点坐标为中心17*17大小的图像并将其他图像像素设为0,写出matlab代码
假设已知点的坐标存储在一个n行2列的矩阵pts中,其中第i行表示第i个点的横坐标和纵坐标。
可以使用循环遍历每个点,并在图像中截取以该点为中心的17*17大小的图像,将其他图像像素设为0。
代码如下:
```
% 假设图像大小为img_size,已知点坐标存储在pts矩阵中
img_size = [100, 100]; % 图像大小
n = size(pts, 1); % 点的数量
for i = 1:n
x = pts(i, 1); % 当前点的横坐标
y = pts(i, 2); % 当前点的纵坐标
% 计算截取图像的左上角坐标和右下角坐标
x1 = max(1, x - 8); % 左上角横坐标
y1 = max(1, y - 8); % 左上角纵坐标
x2 = min(img_size(2), x + 8); % 右下角横坐标
y2 = min(img_size(1), y + 8); % 右下角纵坐标
% 初始化截取图像为0
img = zeros(17, 17);
% 将图像中该点周围的像素值赋值给截取图像
img((y1-y+8+1):(y2-y+8+1), (x1-x+8+1):(x2-x+8+1)) = im(y1:y2, x1:x2);
% 处理截取图像
% ...
% 将处理后的截取图像赋值回原图像中该点周围的像素
im(y1:y2, x1:x2) = img((y1-y+8+1):(y2-y+8+1), (x1-x+8+1):(x2-x+8+1));
end
```
其中,计算截取图像的左上角坐标和右下角坐标时需要注意边界条件,不能超出图像大小。截取图像后,可以对其进行任何需要的处理,例如图像增强、特征提取等。最后,将处理后的图像赋值回原图像中该点周围的像素即可。
已知多个点坐标,在图像中截取以点坐标为中心17*17大小的图像并将其他图像像素设为0,将所有结果表现在同一幅图像中,写出matlab代码
假设点坐标存储在一个 $n \times 2$ 的矩阵 `points` 中,每行为一个点的横纵坐标,可以使用以下 Matlab 代码实现:
```matlab
% 读取原始图像
img = imread('image.jpg');
% 图像大小
[height, width, ~] = size(img);
% 图像中截取的半径
radius = 8;
% 初始化结果图像
result = zeros(height, width);
% 遍历所有点
for i = 1:size(points, 1)
% 获取当前点的横纵坐标
x = points(i, 1);
y = points(i, 2);
% 计算当前点所在区域的左上角和右下角坐标
x1 = max(1, x - radius);
y1 = max(1, y - radius);
x2 = min(width, x + radius);
y2 = min(height, y + radius);
% 将当前点所在区域的像素设置为原图像对应区域的像素
result(y1:y2, x1:x2) = img(y1:y2, x1:x2);
end
% 显示结果图像
imshow(result);
```
其中 `image.jpg` 是原始图像的文件名,`radius` 是截取的半径,`result` 是结果图像矩阵,遍历所有点时,将当前点所在区域的像素设置为原图像对应区域的像素即可。为了避免超出图像边界,需要使用 `max` 和 `min` 函数计算当前点所在区域的左上角和右下角坐标。最后使用 `imshow` 函数显示结果图像。
阅读全文