0

画像内の関心領域が計算されます。透かしをROIに埋め込む方法..画像全体に透かしを埋め込むためのコードをlsbに入れました。ロイだけのためにどのように変更できますか?

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')
4

1 に答える 1

0

ROI が長方形の場合は、画像全体ではなく、画像の適切なサブセクションをループします。

そうでない場合は、透かしを何らかの関数として定義できます。

imgout = watermark(img1, img2);

次にroifilt2、ROI だけにその関数を適用するために使用できます。

この単純な例でmaskは、1 が ROI の一部を示す BW マトリックスです (マスクは、いくつかのインタラクティブな 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 関数を使用する方法と使用しない方法があります。最初に投資収益率をどのように設定するかによって、多くのことが異なります。たとえば、中心/半径があるか、インタラクティブに位置を手動で選択するかなどです。Image Processing Tool Box を使用した例をいくつか示します。

インタラクティブな ROI 関数と createMask。

これは、インタラクティブな roi 関数 (imellipse、imfreehand など) で機能します。2 番目と 3 番目のステップの間でマスクをインタラクティブに調整できます。を呼び出す前にイメージ ウィンドウを閉じないでください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 を使用することです。3 番目と 4 番目の値は、返されるマスクの合計サイズを定義します。

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);
于 2013-11-06T16:59:12.123 に答える