h3ll0 2021-10-06 20:44 采纳率: 45.2%
浏览 29
已结题

Matlab中的LSB算法代码报错

image = imread('baboon.bmp');
hide_image = image;
hide_image = double(hide_image);
image_size = size(image);
if numel(image_size)>2
    ['this is a rgb photo']
else
    ['this is not a rgb photo']
    fclose('all');
end
image_1 = hide_image(:,:,1);
message = fopen('message.txt', 'r');
[msg, msg_len] = fread(message, 'ubit1');
[m, n] = size(image_1);

p = 0;
[row, col] = randinterval(image_1, msg_len, 1996);

for i = 1:msg_len
    image_1(row(i), col(i)) = image_1(row(i), col(i)) - mod(image_1(row(i), col(i)), 2) + msg(p, 1);
    if p == msg_len
        break;
    end
end

function [row,col]=randinterval(matrix,count,key)
%计算间隔的位数
[m,n]=size(matrix);
interval1=floor(m*n/count)+1;
interval2= interval1-2;
if interval2==0
   error('载体大小不能将秘密信息隐藏进去!');
end
%生成随机序列
rand('seed',key);
a=rand(1,count);
%计算row和col
r=1;
c=1;
row(1,1)=r;
col(1,1)=c;
for i=2:count
    if a(i)>=0.5
        c=c+interval1;
    else
        c=c+ interval2;
    end
    if c>n
        r=r+1;
        if r>m
            error('载体大小不能将秘密信息隐藏进去!');
        end
        c=mod(c,n);
        if c==0
            c=1;
        end
    end
end
row(1,i)=r;
col(1,i)=c;
end

报错信息
位置 1 处的索引无效。数组索引必须为正整数或逻辑值。

出错 work (line 20)
image_1(row(i), col(i)) = image_1(row(i), col(i)) -
mod(image_1(row(i), col(i)), 2) + msg(p, 1);

  • 写回答

1条回答 默认 最新

  • joel_1993 2021-10-06 21:27
    关注

    你好,请检查
    row、col以及p是否都是正整数,然后根据自己的程序更正错误

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月20日
  • 创建了问题 10月6日

悬赏问题

  • ¥20 这张图页脚大概具体代码该怎么写?
  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22