%designed by
李立宗
%t4311.m
c=imread('e:/lena.bmp');
subplot(1,3,1),imshow(c),title('
嵌入水印前影象
');
[m,n]=size(c);
dix=zeros(255);
for i=1:512
for j=1:512
for k=1:255
if c(i,j)==k
dix(k)=dix(k)+1;
endend
endend
% subplot(3,3,2),plot(dix);
max=dix(1);
for i=1:255
if max
max=dix(i);
maxi=i;
endend
maxc1=c;
for i=1:512
for j=1:512
if c(i,j)
c1(i,j)=c(i,j)-1;
else
c1(i,j)=c(i,j);
endend
enddix2=zeros(255);
for i=1:512
for j=1:512
for k=1:255
if c1(i,j)==k
dix2(k)=dix2(k)+1;
endend
endend
% subplot(3,3,3),plot(dix2);
% subplot(3,3,4),plot(dix,'r'),hold on,plot(dix2,'g:');
mark=imread('e:/logo1.bmp');
mark=im2bw(mark);
subplot(1,3,2),imshow(mark),title('
水印影象
');
%讀入水印影象,並將之二值化處理
% figure,imshow(mark),title('
水印影象
');
mark1=zeros(1,1600);
n=1;
for i=1:40
for j=1:40
mark1(n)=mark(i,j);
n=n+1;
endend
% mark1=reshape(mark,1,1600); %
測試mark1
的正確與否
% n=1;
% for i=1:40
%for j=1:40
%mark2(i,j)=mark1(n);
%n=n+1;
%end
% end
% subplot(1,3,3),imshow(mark2),title('
水印影象
');
c2=zeros(512,512);
c2=c1;
n=0;
for i=1:512
for j=1:512
if c2(i,j)==maxi
n=n+1;
if(n==1600)
n=1;
endif mark1(n)==1
c2(i,j)=c2(i,j)-1;
endend
endend
% n=1;
% for i=1:512
%for j=1:512
%ifc2(i,j)==maxi&& mark1(n)==1
%c2(i,j)=c2(i,j)-1;
%n=n+1; %
%end
%end
% end
subplot(1,3,3),imshow(c2),title('
嵌入水印後影象
');
markshow=zeros(1,5000); %
分配乙個大陣列,這樣可以儲存冗餘量
n=1;
for i=1:512
for j=1:512
if c2(i,j)==maxi
markshow(n)=0;
n=n+1;
elseif c2(i,j)==(maxi-1)
markshow(n)=1;
n=n+1;
endend
endmarkshow;
markshow1=zeros(40,40); %
定義乙個陣列,用來儲存恢復的水印
n=1;
for i=1:40
for j=1:40
markshow1(i,j)=markshow(n);
n=n+1;
endend
% subplot(1,3,3),imshow(markshow1),title('
恢復水印影象
');
c3=c2;
for i=1:512
for j=1:512
if c2(i,j)
c3(i,j)=c2(i,j)+1;
else
c3(i,j)=c2(i,j);
endend
end%subplot(1,3,3),imshow(c3),title('
恢復原始載體影象
');
修改最大畫素值的可逆數字演算法的實現
designed by 李立宗 lilizong gmail.com t4311.m c imread e lena.bmp subplot 1,3,1 imshow c title 嵌入水印前影象 m,n size c dix zeros 255 for i 1 512 for j 1 512 f...
計算最大次大值的最優演算法
求最大,次大值,比較次數為 n log n 2 n 1 為求最大值的代價,log n 1 為求次大值的代價。public class submaxandmaxefficient void heapfindmax int e,int n 找最大值,放到array 1 for last 2 n 2 la...
最大值和次大值問題的最優演算法
輸入 n個數,最壞情況下用 n logn 2 次比較找出當中的最大值和次大值。解題思想 根據題意出現 logn 則肯定用到二分或者堆的思路,但是輸入的數沒有經過排序,而且題目要求的計算量也不允許排序。這樣,就肯定會用到類似堆的思路,但是直接構造堆等同於排序。堆的思想跟競標賽類似,都是父節點 子節點。...