【问题标题】:how to embed a watermark inside roi in matlab如何在matlab中的roi中嵌入水印
【发布时间】:2013-11-06 06:12:34
【问题描述】:

计算图像中的感兴趣区域。现在如何将水印嵌入到 roi 中。我已经将用于嵌入它的代码放入 lsb 中的整个图像中。单独为 roi 怎么修改?

clear all; 
file_name='pout.tif'; 
cover_object=imread(file_name); 
file_name='cameraman.tif'; 
message=imread(file_name); 
message=double(message); 
message=round(message./256); 
message=uint8(message); 
Mc=size(cover_object,1);    
Nc=size(cover_object,2);    
Mm=size(message,1);         
Nm=size(message,2);         

for ii = 1:Mc 
    for jj = 1:Nc 
        watermark(ii,jj)=message(mod(ii,Mm)+1,mod(jj,Nm)+1); 
    end 
end 

watermarked_image=cover_object; 
for ii = 1:Mc 
    for jj = 1:Nc 
        watermarked_image(ii,jj)=bitset(watermarked_image(ii,jj),1,watermark(ii,jj)); 
    end 
end 

imwrite(watermarked_image,'watermarkedimage','bmp'); 
figure(1) 
imshow(watermarked_image,[]) 
title('Watermarked Image')

【问题讨论】:

  • 您能解释一下您要做什么吗?在图像上添加水印的方法有很多种。
  • 我有两个图像 img1 和 img2。现在我需要将 img 2 嵌入到 img 1 的 roi 中
  • “嵌入”是什么意思?
  • 用另一张图像加水印。用另一幅图像的像素值修改一幅图像的像素值。典型的数据隐藏
  • 我知道,但是有很多方法可以将图像隐藏在另一个图像中。

标签: matlab image-processing computer-vision signal-processing


【解决方案1】:

如果您的 roi 是矩形,则只需遍历图像的相应子部分而不是整个图像。

如果没有,您可以将水印定义为某个函数:

imgout = watermark(img1, img2);

然后您可以使用roifilt2 将该功能应用于您的投资回报率。

在这个简单的例子中,mask 是一个 BW 矩阵,其中 1 表示我们的 roi 的一部分(可以通过几种不同的方式创建掩码,包括使用一些交互式 roi 函数,请参见底部)。 img1img2 已经加载完毕:

f = @(x) watermark(x,img2); % our very basic function 
imgout = roifilt2(img1,mask,f);

如果您的 img2 小于 img1(或者如果您想调整其大小以仅覆盖 roi 区域),则可能会出现复杂情况。在这种情况下,在 img1/mask 的一个小节上执行所有操作,然后组装最终图像:

img1_s = img1(a:b,c:d); % these return the same size as img2
mask_s = mask(a:b,c:d); 

imgout_s = roifilt2(img1_s,mask1_s,f); 

imgout = img1;
imgout(a:b,c:d) = imgout_s;

可以通过多种方式创建蒙版,有些使用交互式 roi 函数,有些则不使用。很大程度上取决于您首先如何获得 roi - 您是否有中心/半径,或者您是否想以交互方式手动选择位置等。以下是一些使用图像处理工具箱的示例:

交互式 ROI 函数和 createMask。

这适用于任何交互式 roi 函数(imellipse、imfreehand 等)。您可以在第二步和第三步之间以交互方式调整蒙版。在调用createMask之前不要关闭图像窗口。

h = imshow(img); %display image
e = imellipse(gca,[50 50 100 100]); % select roi
mask = createMask(e,h); % return mask

x/y 点和 poly2mask 列表 如果您有一个定义 roi 外边缘的点列表,则生成遮罩的一种快速非交互式方法是使用 poly2mask。第三个和第四个值定义了返回的掩码的总大小。

mask = poly2mask(x,y,size(img,1),size(img,2));

使用形态运算符 strel 定义了一个结构元素,imdilate 使用该结构元素执行膨胀。给定一个包含单个点的图像,它所做的就是用结构元素替换该点 - 在这种情况下disk 将产生一个圆圈(或使用像素尽可能接近)。其他形状(例如diamond)可以与strel一起使用

mask = zeros(size(img));
mask(a,b) = 1; % a,b is the centre point of the circle
se = strel(disk,r,0); %r is the radius of the circle
mask = imdilate(mask,se);

【讨论】:

  • roi 的形状无关紧要;您只需要将“掩码”定义为二进制图像。我将添加一些示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多