用2023a版matlab写一段将四副256*256的灰度图像I1、I2、I3、I4进行灰度加权平均图像融合后的图像进行几何质心提取固定大小的有效区域,其中有效区域为将标准图像内切圆中的内接正方形区域确定为标准图像的有效区域
时间: 2024-03-18 11:40:05 浏览: 54
可以使用以下代码实现:
```matlab
% 读入四张256*256的灰度图像
I1 = imread('image1.jpg');
I2 = imread('image2.jpg');
I3 = imread('image3.jpg');
I4 = imread('image4.jpg');
% 灰度加权平均图像融合
a = [0.25, 0.25, 0.25, 0.25];
imf = a(1)*double(I1) + a(2)*double(I2) + a(3)*double(I3) + a(4)*double(I4);
imf = uint8(imf);
% 计算几何质心和有效区域
imf_bw = imbinarize(imf); % 二值化
imf_bw = imfill(imf_bw, 'holes'); % 填充孔洞
imf_props = regionprops(imf_bw, 'BoundingBox', 'Area', 'Centroid'); % 获取连通区域属性
[~, idx] = max([imf_props.Area]); % 取面积最大的连通区域
bbox = imf_props(idx).BoundingBox; % 获取包围盒
centroid = imf_props(idx).Centroid; % 获取几何质心坐标
% 提取内接正方形区域作为有效区域
d = min(bbox(3), bbox(4)); % 取包围盒宽和高的最小值
x = bbox(1) + (bbox(3) - d) / 2; % 计算正方形左上角的x坐标
y = bbox(2) + (bbox(4) - d) / 2; % 计算正方形左上角的y坐标
ROI = imcrop(imf, [x, y, d, d]); % 截取正方形区域
% 提取标准图像内切圆中的区域作为有效区域
r = d / 2; % 圆形半径
s = sqrt(2) * r; % 正方形边长
x = centroid(1) - s / 2; % 正方形左上角x坐标
y = centroid(2) - s / 2; % 正方形左上角y坐标
circle_mask = uint8((x - centroid(1))^2 + (y - centroid(2))^2 <= r^2); % 生成圆形掩模
square_mask = ones(size(ROI)); % 生成正方形掩模
square_mask(1:floor((size(ROI, 1)-s)/2), :) = 0;
square_mask(end-floor((size(ROI, 1)-s)/2)+1:end, :) = 0;
square_mask(:, 1:floor((size(ROI, 2)-s)/2)) = 0;
square_mask(:, end-floor((size(ROI, 2)-s)/2)+1:end) = 0;
ROI = ROI .* circle_mask .* square_mask; % 提取圆形内的正方形区域作为有效区域
% 显示结果
figure;
subplot(1,2,1);
imshow(imf);
title('灰度加权平均图像融合');
subplot(1,2,2);
imshow(ROI);
title('提取的有效区域');
```
需要注意的是,代码中使用了imbinarize函数将灰度图像转换为二值图像,因此需要先将图像进行double类型转换再进行灰度加权平均。同时,需要对ROI进行掩模运算,提取圆形内的正方形区域。
阅读全文