matlab数字图像处理的集合操作

  • Post author:
  • Post category:其他


图像的集合操作是针对灰度图像进行的,包括交集运算、并集运算和补集运算。令两张同样大小的灰度图像元素分别用集合A和集合B表示,集合A的元素的三元组形式为(x,y,a),其中x,y是坐标,a是灰度值;集合B的元素的三元组形式为(x,y,b),其中x,y是坐标,a是灰度值。则定义:

1.图像A、B的交集运算定义为图像对应位置的像素值取a,b中的较小值。

A\bigcap B=\left \{ (x,y,min(a,b),a\epsilon A,b\epsilon B) \right \}

2.图像A、B的并集运算定义为图像对应位置的像素值取a,b中的较大值。

A\bigcup B=\left \{(x,y,max(a,b),a\epsilon A,b\epsilon B) \right \}

3.图像A的补集运算定义为一个常数k与图像中每个像素的灰度差值,其中常数k一般取全白色对应的像素值(0-1就取1,0-255就取255),这样结果图像就会黑白翻转,当然k也可以根据具体需要随便取值。

A^{c}=\left \{ (x,y,k-a),a\epsilon A \right \}

matlab代码如下:

函数定义代码:

function out=image_set
    out.set_intersect=@set_intersect;
    out.set_union=@set_union;
    out.set_comple=@set_comple;
end

%交集
function img=set_intersect(f1,f2)%f1,f2为输入的两幅同样大小的图像,后续函数也一样
    img=min(f1,f2);
end

%并集
function img=set_union(f1,f2)
    img=max(f1,f2);
end

%补集
function img=set_comple(f)
    img=1-f;  %这里默认输入图像f是0-1范围的,所以常数k为最大值1,结果就是黑白翻转
end

运行代码:

f1=imread('yama.jpg');%读取一个名为yama的jpg图像,但要保证该图像文件与当前程序在同一目录下
f1=mat2gray(f1,[0,255]);%把图像像素值0-255压缩到0-1,便于后续图像操作
figure1=figure;%画布1,以此类推
imshow(f1)%展示原始图像,对于像素值为0-1模式的,若有大于1或小于0的像素点,imshow函数均按1或0处理

f2=imread('yama.jpg');
f2=mat2gray(f2,[0,255]);
f2=f2./2;%将原图像的像素值全都变为原来的一半(不是什么特定的要求,只是为了改变像素值便于观察操作结果,本质上也可以随意改变像素值)
figure2=figure;%画布2,以此类推
imshow(f2);%展示原始图像的像素值全都变为原来一半后的图像

fun=image_set;%调用另一个文件

int_img=fun.set_intersect(f1,f2);
figure3=figure;
imshow(int_img)%展示两张图像的交集结果

uni_img=fun.set_union(f1,f2);
figure4=figure;
imshow(uni_img)%展示两张图像的并集结果

com_img1=fun.set_comple(f1);%原始图像的补集
com_img2=fun.set_comple(f2);%原始图像像素值缩小一倍后图像的补集
figure5=figure;
imshow(com_img1)%展示原始图像的补集结果
figure6=figure;
imshow(com_img2)%展示原始图像像素值缩小一倍后图像的补集结果

运行结果:

原图像:

像素值缩小一倍后的图像:

可以看到像素值变小后,图像整体偏暗。

两张图像交集运算结果(取像素值小的像素):

两张图像并集运算结果(取像素值大的像素):

原图像补集运算结果:

图像像素黑白翻转。

原图像像素值缩小一倍后图像的补集运算结果:

感谢阅读!



版权声明:本文为XIETINGYUWO原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。