如何将灰度图像转换成二进制序列

8视图(30天)
我对数字水印的研究。我想转换一个灰度图像(MxN像素(一个像素值0 ~ 255)在一个二进制序列和交换它这个序列嵌入到另一个图像。我可以提取这个序列,恢复原始灰度图像。我应该做什么。请帮助我。
2的评论
图像分析
图像分析 2020年6月10日
Khulood,如果你搜索我的回答下面你会看到一个名为binaryImage的变量,以及如何通过阈值我懂了。

登录置评。

接受的答案

图像分析
图像分析 2013年7月17日
这是我的LSB水印演示:
%演示水印图像通过隐藏另一个图像在某一点
%的飞机。有时被称为“LSB水印”或类似的东西。
%用户问他们想要隐藏哪位平面图像。
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
imtool关闭所有;%关闭所有imtool数字。
清晰;%擦掉所有现有的变量。
工作空间;%确定工作区面板显示。
字形大小= 12;
%读入图像会有另一个图像隐藏。
baseFileName =“moon.tif”;
% baseFileName =“cameraman.tif”;
文件夹= fullfile (matlabroot,“\工具箱\ \ imdemos图像”);
%得到完整的文件名,路径前缀。
fullFileName = fullfile(文件夹,baseFileName);
如果~存在(fullFileName“文件”)
%没有找到它。检查它的搜索路径。
fullFileName = baseFileName;%没有路径。
如果~存在(fullFileName“文件”)
%仍然没有找到它。提醒用户。
errorMessage = sprintf (错误:%年代并不存在。,fullFileName);
uiwait (warndlg (errorMessage));
返回;
结束
结束
originalImage之下= imread (fullFileName);
%得到原始图像的行和列的数量。
[visibleRows visibleColumns numberOfColorChannels] =大小(originalImage之下);
如果numberOfColorChannels > 1
%如果颜色,提取红色通道。
originalImage之下= originalImage之下(:,:1);
结束
%显示原始灰度图像。
次要情节(3、3、4);
imshow (originalImage之下,[]);
标题(“原始灰度图像开始”,“字形大小”、字形大小);
%全屏放大图。
集(gcf,“单位”,“归一化”,“outerposition”,(0 0 1 1));
集(gcf,“名字”,“由ImageAnalyst演示”,“numbertitle”,“关闭”)
%读消息图片你想躲在封面图片
baseFileName =“cameraman.tif”;
% baseFileName =“moon.tif”;
%得到完整的文件名,路径前缀。
fullFileName = fullfile(文件夹,baseFileName);
如果~存在(fullFileName“文件”)
%没有找到它。检查它的搜索路径。
fullFileName = baseFileName;%没有路径。
如果~存在(fullFileName“文件”)
%仍然没有找到它。提醒用户。
errorMessage = sprintf (错误:%年代并不存在。,fullFileName);
uiwait (warndlg (errorMessage));
返回;
结束
结束
hiddenImage = imread (fullFileName);
%得到隐藏图像的行和列的数量。
[hiddenRows hiddenColumns numberOfColorChannels] =大小(hiddenImage);
如果numberOfColorChannels > 1
%如果颜色,提取红色通道。
hiddenImage = hiddenImage (:: 1);
结束
%显示图像。
次要情节(3,- 3,- 1);
imshow (hiddenImage []);
标题(图像被隐藏的,“字形大小”、字形大小);
%计算并显示直方图。
[pixelCount灰度]= imhist (hiddenImage);
次要情节(3、3、2);
酒吧(pixelCount);
标题(直方图的图像隐藏的,“字形大小”、字形大小);
xlim([0灰度(结束)]);% x轴手动。
网格;
thresholdValue = 70;
binaryImage = hiddenImage < thresholdValue;
%显示图像。
次要情节(3,3,3);
imshow (binaryImage []);
标题= sprintf (的隐藏图像阈值% d ',thresholdValue);
标题(标题,“字形大小”、字形大小);
%得到隐藏图像的位平面。
提示=“输入你想隐藏图像的位平面(1 - 8)”;
dialogTitle =输入位平面来代替的;
numberOfLines = 1;
defaultResponse = {“6”};
bitToSet = str2double (cell2mat (inputdlg(提示,dialogTitle、numberOfLines defaultResponse)));
%如果图像隐藏的比原始图像更大,规模。
如果hiddenRows > visibleRows | | hiddenColumns > visibleColumns
amountToShrink = min ([visibleRows / hiddenRows visibleColumns / hiddenColumns]);
binaryImage = imresize (binaryImage amountToShrink);
%需要更新的行数和列。
[hiddenRows hiddenColumns] =大小(binaryImage);
结束
% hiddenImage瓷砖,如果是小的,这样它将覆盖原来的形象。
如果hiddenRows < visibleRows | | hiddenColumns < visibleColumns
水印= 0(大小(originalImage之下),“uint8”);
列= 1:visibleColumns
行= 1:visibleRows
水印(行、列)= binaryImage (mod(行,hiddenRows) + 1,国防部(列,hiddenColumns) + 1);
结束
结束
%作物与原始图像相同大小。
水印=水印(1:visibleRows, 1: visibleColumns);
其他的
%水印与原始图像大小相同。
水印= binaryImage;
结束
%显示阈值的二进制图像,水印。
次要情节(3、3、5);
imshow(水印,[]);
标题= sprintf (而“隐藏图像\插入位平面% d ',bitToSet);
标题(标题,“字形大小”、字形大小);
%设置一些originalImage之下(一份,实际上)水印的价值。
watermarkedImage = originalImage之下;%初始化
列= 1:visibleColumns
行= 1:visibleRows
watermarkedImage(行、列)= bitset (bitToSet originalImage之下(行、列),水印(行、列));
结束
结束
%显示图像。
次要情节(3、3、6);
imshow (watermarkedImage []);
标题= sprintf (最后有水印的图像\ nwithout说噪音”);
标题(标题,“字形大小”、字形大小);
%添加噪声有水印的图像
noisyWatermarkedImage = imnoise (watermarkedImage,“高斯”,0,0.0005);
%显示图像。
次要情节(3、3、7);
imshow (noisyWatermarkedImage []);
标题= sprintf (有水印的图像\ nwith说噪音”);
标题(标题,“字形大小”、字形大小);
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
%现在让我们假装我们的起点是有水印的噪声损坏的图像。
%我们想恢复水印。
%使用已知bitplane有水印的图像恢复水印。
recoveredWatermark = 0(大小(noisyWatermarkedImage));
recoveredNoisyWatermark = 0(大小(noisyWatermarkedImage));
列= 1:visibleColumns
行= 1:visibleRows
recoveredWatermark(行、列)= bitget (watermarkedImage(行、列),bitToSet);
recoveredNoisyWatermark(行、列)= bitget (noisyWatermarkedImage(行、列),bitToSet);
结束
结束
%恢复水印0 = 255
recoveredWatermark = uint8 (255 * recoveredWatermark);
recoveredNoisyWatermark = uint8 (255 * recoveredNoisyWatermark);
%显示图像。
次要情节(3、3、8);
imshow (recoveredWatermark []);
标题= sprintf (水印的恢复\ nfrom位平面% d \ nNoise-Free有水印的图像”,bitToSet);
标题(标题,“字形大小”、字形大小);
%显示图像。
次要情节(3、3、9);
imshow (recoveredNoisyWatermark []);
标题= sprintf (水印的恢复\ nfrom位平面% d \ nNoisy有水印的图像”,bitToSet);
标题(标题,“字形大小”、字形大小);
对话框(“完成了演示!”);

更多的答案(2)

Lokesh Ravindranathan
Lokesh Ravindranathan 2013年7月17日
将图像转换为二进制序列,
排列使用以下代码
交换(重塑(我,元素个数(我),1))
使用嵌入的排列图像。
1评论
图像分析
图像分析 2013年7月17日
你不需要叫排列()和重塑()——只是我(:)。但我不认为这是他想要的东西。

登录置评。


阿里nafaa
阿里nafaa 2022年11月29日
x = imread (“cameraman.tif”);
图,imshow (x);
(r、c) = (x)大小;
输出= 0 (r、c);
i = 1: r
j = 1: c
如果x (i, j) > 128
输出(i, j) = 1;
其他的
输出(i, j) = 0;
结束
结束
结束
图中,imshow(输出);
3评论
图像分析
图像分析 2022年11月29日
是的,这就是你所说的零()。但是数据隐藏(嵌入)在您的代码呢?

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!