给我一段matlab代码使得一张768*1024*3的图片转换为512*512*31
时间: 2023-09-05 10:07:53 浏览: 168
这里有一个简单的 Matlab 代码实现将一张 $768 \times 1024 \times 3$ 的图片转换为 $512 \times 512 \times 31$:
```matlab
% 读取原始图片
img = imread('原始图片路径');
% 将图片裁剪成 31 个 $512 \times 512$ 的小图片
small_imgs = mat2cell(img, [repelem(512, 29), 256], [repelem(512, 25), 256]);
% 将小图片合并成一张 $512 \times 512 \times 31$ 的图片
new_img = zeros(512, 512, 31, 'uint8');
for i = 1:29
for j = 1:25
new_img(:, :, (i - 1) * 25 + j) = small_imgs{i, j};
end
end
new_img(:, :, end - 1) = small_imgs{end - 1, end};
new_img(:, :, end) = small_imgs{end, end};
```
这里我们使用 `mat2cell` 函数将原始图片裁剪成 $31$ 个 $512 \times 512$ 的小图片,然后使用循环将这些小图片合并成一张 $512 \times 512 \times 31$ 的图片。注意最后两个小图片的大小是 $256 \times 256$,需要特殊处理。
相关问题
请帮我修改下面这段matlab中的代码,使得作中值滤波处理的时候,可以设定并可视化几种不同的窗口大小。clc; clear; I = imread('Panda.bmp'); %读取图片 I_PepperSalt=imnoise(I,'salt & pepper'); %添加椒盐噪声 [m,n] = size(I_PepperSalt);% 读取图像长和宽 I1 = double(I_PepperSalt);%将图像转换成double类型 I2 = I1; for i=2:m-1 for j=2:n-1 %从去除边缘的像素开始源波 Mat = I1(i-1:i+1,j-1:j+1); Mat2 = Mat(:); s=sort(Mat2);%对像素进行排序 I2(i,j) = s(floor(9/2)+1); %选取中值 end end I3 = uint8(I2); %%图像对比 figure; subplot(131) imshow(I); title("原始图像"); subplot(132) imshow(I_PepperSalt); title("椒盐噪声图像"); subplot(133) imshow(I3); title("中值滤波图像");
以下是修改后的代码,使用了一个循环来遍历不同的窗口大小,并使用了一个 cell 数组来存储每个窗口大小对应的结果图像。在可视化时,使用了 subplot 函数来将不同的结果图像显示在同一张图像上,方便比较。
```matlab
clc; clear;
I = imread('Panda.bmp'); %读取图片
I_PepperSalt = imnoise(I,'salt & pepper'); %添加椒盐噪声
[m,n] = size(I_PepperSalt); % 读取图像长和宽
I1 = double(I_PepperSalt); %将图像转换成double类型
% 定义不同的窗口大小
win_sizes = [3, 5, 7];
% 存储不同窗口大小对应的结果图像
results = cell(1, length(win_sizes));
for k = 1:length(win_sizes)
win_size = win_sizes(k);
I2 = I1;
for i = (win_size+1)/2 : m-(win_size-1)/2
for j = (win_size+1)/2 : n-(win_size-1)/2
Mat = I1(i-(win_size-1)/2:i+(win_size-1)/2,j-(win_size-1)/2:j+(win_size-1)/2);
Mat2 = Mat(:);
s = sort(Mat2);
I2(i,j) = s(floor(win_size^2/2)+1);
end
end
results{k} = uint8(I2);
end
% 显示原始图像、椒盐噪声图像和不同窗口大小对应的结果图像
figure;
subplot(2,2,1); imshow(I); title("原始图像");
subplot(2,2,2); imshow(I_PepperSalt); title("椒盐噪声图像");
for k = 1:length(win_sizes)
subplot(2,2,k+2); imshow(results{k}); title(sprintf("窗口大小:%d", win_sizes(k)));
end
```
阅读全文