matlab实现叠像术

 

这段MATLAB代码的作用是:

  1. 用户选择一个PNG格式的图像文件。
  2. 如果用户取消选择,则显示"用户取消了照片选择"。
  3. 如果用户选择了图像文件,则程序会读取该图像文件。
  4. 如果图像是彩色的(即有3个通道),则将其转换为灰度图像。
  5. 将灰度图像转换为二值图像(黑白图像)。
  6. 创建两个无意义的图像(meaninglessImage1meaninglessImage2):
    • 对于二值图像中的每个像素,随机选择0或1,并分别赋值给这两个无意义图像。
  7. 将这两个无意义的图像分别保存为无意义图像1.png无意义图像2.png
  8. 生成两个有意义的图像(meaningfulImage1meaningfulImage2):
    • 生成一个与二值图像相同大小的随机矩阵。
    • 设定一个阈值(0.5),根据随机矩阵中每个元素的值大于阈值的条件生成meaningfulImage1,并使用异或操作生成meaningfulImage2
  9. 将这两个有意义的图像分别保存为有意义图像1.png有意义图像2.png

注意事项:

  • 在保存图像时,程序会弹出对话框让用户选择保存的文件名和路径。
  • 程序中使用了随机数生成函数randirand,以及图像处理函数imreadimbinarizeimwrite等。
[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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值