matlab学习(三)(4.9-4.15)

一、空域里LSB算法的原理

1.原理:

LSB算法通过替换图像像素的最低位来嵌入信息。这些被替换的LSB序列可以是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。

2.实现步骤:

(1)将图像文件中的所有像素点以RGB形式分隔开,并将各个颜色分量转换成二进制表示。

(2)把每个颜色分量值的最后一位全部设置成0,这不会影响图像的显示格式,但可以在该位置存放信息。

(3)将水印字符转化为二进制字符串,并将这些信息依次填入颜色分量的最低位上,即可完成信息的嵌入。

(4)要提取信息,只需将图像像素的最低位依次提取出来并进行拼接,即可得到原始信息

3.matlab中代码实现:

% 读取原始图像和水印图像

I = imread('test6.jpg');

I = rgb2gray(I);

watermark = imread('ws2.jpg');

watermark = rgb2gray(watermark);

% 调整水印图像的大小,使其与原始图像相同

M, N = size(I);

watermark = imresize(watermark, M, N);

% 将水印嵌入到原始图像中

watermarked_image = I;

for i = 1:M

for j = 1:N

% 将原图像的最低有效位值换为水印的值

watermarked_image(i, j) = bitset(I(i, j), 1, watermark(i, j));

end

end

% 提取水印

extracted_watermark = zeros(M, N);

for i = 1:M

for j = 1:N

% 从嵌入水印图像中提取水印

extracted_watermark(i, j) = bitget(watermarked_image(i, j), 1);

end

end

% 显示图像

figure;

subplot(2, 2, 1); imshow(I); title('原始图像');

subplot(2, 2, 2); imshow(watermark); title('水印图像');

subplot(2, 2, 3); imshow(watermarked_image); title('嵌入后的图像');

subplot(2, 2, 4); imshow(extracted_watermark); title('提取水印后的图像');

4.运行结果:

二、插值扩展算法的原理

1.原理:

插值算法是一种根据已知数据点来预测未知数据点值的方法。在图像领域中,我们常用插值算法来修改图像尺寸。常见的插值方法有两种:

(1)最近邻插值(Nearest Interpolation): 最近邻插值从原图像矩阵中找到与目标图像像素点距离最近的点,然后将最近点的像素值赋给目标像素点。 计算目标图像像素坐标与原图像像素坐标的对应关系,通过四舍五入来找到最近的点。 尽管最近邻插值计算量较小,但可能会在灰度变化处产生明显的锯齿现象。

(2)线性插值(Linear Interpolation): 线性插值需要找到周围最近的两个点进行插值运算。 单线性插值通过两个最近邻点的加权平均来估计未知点的像素值。 双线性插值在两个方向分别进行一次线性插值,得到目标像素点的值。

插值扩展算法通常属于线性插值的一种扩展。

2.两种方法的实现步骤:

3.插值算法的维度:

(1)一维interpl插值算法:

该算法适用于已知一系列离散数据点的情况下,通过插值计算得到任意一点的函数值。 具体步骤包括:输入一组已知的离散数据点 ((x_i, y_i)),其中 (x_i) 是自变量,(y_i) 是因变量。 对数据点按照 (x) 值从小到大进行排序。 对于给定的待插值点 (x),找到插值区间 (x_i, x_{i+1}),使得 (x_i \leq x \leq x_{i+1})。 利用已知点之间的直线作为插值函数,即根据公式 f(x) = \\frac{x_{i+1} - x}{x_{i+1} - x_i}y_i + \\frac{x - x_i}{x_{i+1} - x_i}y_{i+1} 计算出插值点 (x) 的函数值 (f(x))。 输出插值点 (x) 的函数值 (f(x))。

(2)二维interp2插值算法:

该算法适用于已知二维离散数据点的情况下,通过插值计算得到任意一点的函数值。 具体步骤类似于一维插值,但在二维平面上进行插值。 输出插值点 ((x, y)) 的函数值 (f(x, y))。

4.在matlab中代码实现:

% 读取原始图像

originalImage = imread('test7.jpg');

% 设置目标图像的尺寸(例如,扩大2倍)

targetWidth = size(originalImage, 2) * 2;

targetHeight = size(originalImage, 1) * 2;

% 使用双线性插值算法进行图像扩展

expandedImage = imresize(originalImage, targetHeight, targetWidth, 'bilinear');

% 显示原始图像和扩展后的图像

figure;

subplot(1, 2, 1);

imshow(originalImage);

title('原始图像');

subplot(1, 2, 2);

imshow(expandedImage);

title('扩展后的图像');

% 可选:保存扩展后的图像

imwrite(expandedImage, 'expanded_test7.jpg');

% 注意:您需要将此代码保存为.m文件并在MATLAB中运行。

5.运行结果:

相关推荐
dear_bi_MyOnly7 小时前
【MyBatis 操作数据库】
java·数据库·学习·mybatis·学习方法
一只小菜鸡..8 小时前
南京大学 操作系统 (JYY) 学习笔记:从 UNIX 到 Linux 与庞大的应用生态
笔记·学习·unix
MartinYeung59 小时前
[论文学习]迈向自主医疗人工智能智能体:MIRA系统深度分析
人工智能·学习
熊猫钓鱼>_>10 小时前
ArkTS 装饰器总览:V1 / V2 / 通用装饰器完整学习笔记
笔记·学习·华为·交互·harmonyos·arkts·arkweb
茯苓gao14 小时前
嵌入式开发笔记:CAN与CAN FD完全指南——从帧格式差异到MCU选型实战
网络·笔记·stm32·嵌入式硬件·学习·汽车
木木_王14 小时前
嵌入式学习 | STM32 裸板驱动开发(Day06) | DHT11温湿度传感器超详解(单总线时序+全套驱动代码+智能温湿度报警项目)
驱动开发·stm32·学习
FellAveal14 小时前
【Go语言入门学习笔记】Part19.速率控制、原子计数器、互斥锁(Mutex)、状态协程
笔记·学习·golang
你怎么知道我是队长15 小时前
经典蓝牙(Bluetooth Classic / BR/EDR)学习计划
学习
极地野狼 音乐哔哔15 小时前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
学习·microsoft
oier_Asad.Chen16 小时前
【洛谷题解/AcWing题解】洛谷P4011 孤岛营救问题/AcWing1131拯救大兵瑞恩
数据结构·笔记·学习·算法·动态规划·图论·宽度优先