MATLAB图像代数运算异常处理

					——前言——

异常运算分为两种:计算结果溢出和计算结果类型无效。
①计算结果溢出:
很多图像,eg:灰度图、索引色图、二值图像或有限位真彩色图像,其像素都是都范围限制的。我们在执行多幅图的加减乘除运算时,计算结果很可能会超过有限值范围。例如,两幅256色灰度图在做减法运算时,结果可能为负数;执行加法运算时,像素超过255。这些都属于计算结果溢出。
②计算结果类型无效:
图像数据有很多类型,当我们用uint8,uint16这样像素要求是整数的图像进行除法运算时,结果可能是分数。这是因为图像代数操作函数执行运算时,往往将数据看为double类型。

异常计算结果的修正遵循两个原则:
①超过整数类型有效范围的结果直接截断到限定范围的端点处。
【用uint8作为条件举例】
eg:理论结果是 -12,修正后是0;理论结果是687,修正结果是255.
②对分数计算进行四舍五入。

现在通过示例来演示某图通过加减得到的新图像的运算结果。
例:利用矩阵加法运算增加或减少图像中某种颜色的成分。
clear all;

a=imread(‘C:\图片\qiqi.png’);
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(121);imshow(a);
subplot(122);imshow( c );

结果:在这里插入图片描述
tip:matlab A=(:,1) 和 T =(:,:,1)是什么意思?
A(x,y)表示二维矩阵第x行第y列位置的元素,x为:则表示所有的行。因此,A(:,1)就表示A的第1列的所有元素,这是一个列向量。
T =(:,:,1) :matlab T=(:,:,1)代表第一维、第二维的所有数据,第三维的第一个。

猜你喜欢

转载自blog.csdn.net/weixin_44842715/article/details/109407686
今日推荐