在matlab中如何在roi中嵌入水印
计算图像中的感兴趣区域。现在,如何将水印嵌入到roi中。我已经将用于将水印嵌入到lsb中的整个图像的代码。如何仅针对roi进行修改在matlab中如何在roi中嵌入水印,matlab,image-processing,computer-vision,signal-processing,Matlab,Image Processing,Computer Vision,Signal Processing,计算图像中的感兴趣区域。现在,如何将水印嵌入到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); mess
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')
如果您的roi是矩形的,只需在图像的适当部分循环,而不是整个图像 如果不是,则可以将水印定义为某些函数:
imgout=水印(img1、img2)代码>
然后,您可以使用roifilt2
在您的roi中应用该功能
在这个简单的例子中,mask
是一个BW矩阵,其中1表示我们roi的一部分(可以通过多种不同的方式创建一个mask,包括使用一些交互式roi功能,请参见底部部分)<代码>img1
和img2
已加载:
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
定义一个结构元素,而imdiplate
使用该结构元素执行一个扩展。给定一个包含单个点的图像,所做的是用结构元素替换该点-在本例中,磁盘
,它将生成一个圆(或使用像素尽可能接近)。其他形状(例如,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);
你能解释一下你想做什么吗?在图像上添加水印的方法有很多种。我有两张图像img1和img2。现在我需要将img 2嵌入到img 1的roi中,你所说的“嵌入”是什么意思?将一幅图像嵌入另一幅图像。用一幅图像的像素值修改另一幅图像的像素值。一个典型的数据隐藏我知道,但是有很多方法可以将一个图像隐藏在另一个图像中;您只需要将“掩码”定义为二进制图像。我将添加一些示例。