这段MATLAB代码的作用是:
- 用户选择一个PNG格式的图像文件。
- 如果用户取消选择,则显示"用户取消了照片选择"。
- 如果用户选择了图像文件,则程序会读取该图像文件。
- 如果图像是彩色的(即有3个通道),则将其转换为灰度图像。
- 将灰度图像转换为二值图像(黑白图像)。
- 创建两个无意义的图像(
meaninglessImage1
和meaninglessImage2
):- 对于二值图像中的每个像素,随机选择0或1,并分别赋值给这两个无意义图像。
- 将这两个无意义的图像分别保存为
无意义图像1.png
和无意义图像2.png
。 - 生成两个有意义的图像(
meaningfulImage1
和meaningfulImage2
):- 生成一个与二值图像相同大小的随机矩阵。
- 设定一个阈值(0.5),根据随机矩阵中每个元素的值大于阈值的条件生成
meaningfulImage1
,并使用异或操作生成meaningfulImage2
。
- 将这两个有意义的图像分别保存为
有意义图像1.png
和有意义图像2.png
。
注意事项:
- 在保存图像时,程序会弹出对话框让用户选择保存的文件名和路径。
- 程序中使用了随机数生成函数
randi
和rand
,以及图像处理函数imread
、imbinarize
、imwrite
等。
[file, path] = uigetfile('*.png', '请选择需要转换的图像');
if isequal(file, 0)
disp('用户取消了照片选择');
else
% 构建完整的文件路径
fullFileName = fullfile(path, file);
% 读取选择的照片
photo = imread(fullFileName);
if size(photo, 3) == 3
grayImg = rgb2gray(photo); % 转换成灰度图像
else
grayImg = photo;
end
% 转换成二值图像
binaryImg = imbinarize(grayImg);
% 创建无意义图像
meaninglessImage1 = zeros(size(binaryImg), 'logical');
meaninglessImage2 = zeros(size(binaryImg), 'logical');
for i = 1:size(binaryImg, 1)
for j = 1:size(binaryImg, 2)
pixel = binaryImg(i, j);
if pixel == 1
choice = randi([0, 1]);
meaninglessImage1(i, j) = choice;
meaninglessImage2(i, j) = choice;
else
choice = randi([0, 1]);
meaninglessImage1(i, j) = choice;
meaninglessImage2(i, j) = ~choice; % 使用取反操作
end
end
end
% 保存无意义图像
[file, path] = uiputfile('无意义图像1.png', '保存无意义图像1');
imwrite(meaninglessImage1, fullfile(path, file));
[file, path] = uiputfile('无意义图像2.png', '保存无意义图像2');
imwrite(meaninglessImage2, fullfile(path, file));
% 生成两个有意义的图像
randomMatrix = rand(size(binaryImg)); % 生成随机矩阵
threshold = 0.5; % 设定阈值
meaningfulImage1 = randomMatrix > threshold; % 根据阈值转换为逻辑类型
meaningfulImage2 = xor(binaryImg, meaningfulImage1);
% 保存有意义图像
[file, path] = uiputfile('有意义图像1.png', '保存有意义图像1');
imwrite(meaningfulImage1, fullfile(path, file));
[file, path] = uiputfile('有意义图像2.png', '保存有意义图像2');
imwrite(meaningfulImage2, fullfile(path, file));
end