第三章 图像代数运算与逻辑运算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例3-2 A = imread('0045.jpg'); s=size(A); B=double(A); Q1=zeros(s(1),s(2)); Q2=zeros(s(1),s(2)); for m=s(1):-1:1 for n=s(2):-1:1 Q1(m,n)=m; Q2(m,n)=n; end end C(:,:,1)=B(:,:,1); C(:,:,2)=B(:,:,2)-Q2; C(:,:,3)=B(:,:,3)+Q1/3;
两个图像矩阵按照数学上定义的乘法进行运算以后,得 到的新图像已经完全失去了原图像的形状,得到的新图 像往往是不可思议的。
【例3-5】观察分析图像矩阵 乘以或除以常数后图像亮度 的改变。
A = imread('D:\0010.jpg'); A1=double(A); A2=A1*1.5; A3=A1/1.5; A2=uint8(A2); A3=uint8(A3); subplot(1,3,1); imshow(A) subplot(1,3,2); imshow(A2) subplot(1,3,3); imshow(A3)
(c) 合成图像
【思考题】如何修改上面例3-3中的程序,使背景图象清楚 一些。
【例3-4】动画效果。
A = imread('D:\0010.jpg'); s=size(A); m=s(1),n=s(2);
B=zeros(m,n);
A1=double(A); for i=1:10:255
程序中,语句 B(100:250,250:380) =i是把矩阵B中的一 块赋值为i,随着i的 增加,矩阵B中的这 一块的值也在增加。
图像的加减运算实质上就是两个矩阵或 者三维数组进行加减运算。 【例3-3】利用矩阵的加减运算为图像添加背景。 A = imread('D:\0043.jpg'); B = imread('D:\125.jpg'); s1=size(A);s2=size(B); 合理的选择两个图像 m=s2(1);n=s2(2); ,或者先对图像进行 A1=imresize(A,[m n]); 处理,然后把两个图 象相加,使一个图象 A2=double(A1); 成为背景。 B1=double(B); C=A2+B1; 左面程序就是把图像 C1=uint8(C); 125.jpg作为背景。 subplot(1,3,1); imshow(A) subplot(1,3,2); imshow(B) subplot(1,3,3); imshow(C1)
设计左面程序,程序运行 结果是图3-5。
(a)原图像 (b) 乘以1.5后
(c) 除以1.5后
图3-5 图像与常数乘除可以改变 图像的亮度
【例3-6】利用矩阵对应相乘把两个图像合成在一起。
3.1 图像的加减乘除运算
例3-1 利用矩阵的加减运算增加或减少图像中的某种颜色成分。
A = imread('0045.jpg'); s=size(A); B=double(A); C(:,:,1)=B(:,:,1)+ B(:,:,2); C(:,:,2)=B(:,:,2); C(:,:,3)=B(:,:,3)-B(:,:,2); for i=1:s(1) for j=1:s(2) for k=1:s(3) if C(i,j,k)<0 C(i,j,k)=0; end if C(i,j,k)>255 C(i,j,k)=255; end end end end C=uint8(C); subplot(1,2,1); imshow(A) subplot(1,2,2); imshow(C)
Leabharlann Baidu
for i=1:s(1) for j=1:s(2) for k=1:s(3) if C(i,j,k)<0 C(i,j,k)=0; end if C(i,j,k)>255 C(i,j,k)=255; end end end end C=uint8(C); subplot(1,2,1); imshow(A) subplot(1,2,2); imshow(C)
图像加减运算
程序的运行结果为图3-3。程序中,为了把两个图像变为大 小相同,使用了语句A1=imresize(A,[m n])。语句 C1=uint8(C)是为了绘图才使用的,作者在实验时发现不使 用语句C1=uint8(C),程序绘制不出图3-3(c)。
(a) 前景图0043.jpg
(b) 背景图125.jpg 图3-3 为图像添加背景
B(100:250,250:380)=i;
A1(:,:,3)=A1(:,:,3)-B; A2=uint8(A1); imshow(A2) end
然后利用语句 A1(:,:,3)=A1(:,:,3 )-B让花附近的蓝颜 色逐渐减少。
程序运行结果是一个花颜色逐渐改变的动画,为了方便 观察分析,取其中几帧放在图3-4中。
,图像变暗。
2 图像矩阵与图像矩阵进行逐元素对应乘除运算
在Matlab中,两个数组进行逐元素对应相乘使用语句A.*B, 即在前一个数组的右下角加上一个点。这种乘法要求A与B两 个数组维数相同,运算完后得到相同维数的数组。在这本书 中,我们把这种乘法叫做矩阵(元素)对应相乘。
3 两个图像矩阵按照数学上定义的乘法进行运算
(a) i=1
(b) i=150
(c) i=250
图3-4 图像局部块蓝色逐渐消失
【思考题】如何修改上面例3-4中的程序,使花附近的绿颜 色逐渐渐少。
图像的乘除运算
图像的乘除运算主要指图像矩阵与常数进行乘除运 算、图像矩阵与图像矩阵对应元素进行乘除运算、 图像矩阵与图像矩阵进行矩阵乘法运算等。
1 图像矩阵与常数进行乘除运算 图像矩阵与常数进行乘除运算就相当于把矩阵所有 元素都扩大或缩小一定的倍数。当矩阵(元素)乘 以大于1的数时,图像亮度增加;乘以小于1的数时