论文 多个对比方法得到的实验结果图 对每个结果图进行同一位置局部放大 Matlab实现批量结果图的交互局部内容放大

论文 多个对比方法得到的实验结果图

对每个结果图进行同一位置局部放大

使用Matlab实现批量结果图的交互局部内容放大

实验效果:

在这里插入图片描述
代码实现:main.m

%%
% 该文件主要是用于在源图像中选择两块区域进行放大显示
%%
clear all;
clc;
source_dir = 'F:\Desktop\毕业论文\tool\draw_enlarge\image_test'; % 存放待放大图像的文件夹
names = {'1.tif', '2.tif', '3.tif', '4.tif'};  %% 文件夹下所有图像的名称
results_dir = '.\MSRS'; % 存放highlight结果的文件夹
if ~exist(results_dir,'dir')
	mkdir(results_dir)
end
[m, n] = size(names);
for i  = 1 : n
    img_name = fullfile(source_dir, cell2mat(names(i))); % 构造图像的路经
    save_name = fullfile(results_dir, cell2mat(names(i))); %构造保存图像的路径
    I3 = im2double(imread(img_name)); % 读取图像
    imshow(I3)
    if size(I3, 3)<3 %% 如果是灰度图像则转换为3通道图像
        I3 = cat(3, I3, I3, I3);
    end
    %% 第一个待放大的区域选择
    if i == 1 %% 如果是第一幅图片,则应该在这个图像上画框,然后获取框的坐标信息
         % rect1四元素 得到了[x y width height]裁剪框的 左上角的宽 高 框的宽 高
        [img0, rect1] = imcrop(I3);  
        pt1 = floor([rect1(2), rect1(1)]); % y1 x1
        pt2 = floor([rect1(4) + rect1(2), rect1(3) + rect1(1)]); % y2 x2
    end
    color1 = [255.0 0 0];
    imMod = localExpandRGB(I3, pt1, pt2, 2, 3, 3, color1); % 42
    imshow(imMod)
    
    %% 第一个待放大的区域选择
    if i ==1
        [img0, rect2] = imcrop(imMod);
        pt2_1 = floor([rect2(2), rect2(1)]);
        pt2_2 = floor([rect2(4) + rect2(2), rect2(3) + rect2(1)]);
    end
    color2 = [0 255.0 0];
    imMod2 = localExpandRGB(imMod, pt2_1, pt2_2, 2, 3, 4, color2); % 42
    imshow(imMod2)    
    disp(save_name)
    imwrite(imMod2 ,save_name); %保存结果
end

localExpandRGB.m

function imMod = localExpandRGB(src,topLeft,lowerRight,expandTime,w,framedim,color)
%%%局部放大画中画小程序
%src          原始图像,可以为灰度图,可为彩色图
%topLeft      区域的左上角坐标,[y1, x1]
%lowerRight   区域的右下点坐标,[y2, x2]
%%坐标可通过在Matlab的figure中进行查看,注意需要调换横纵坐标顺序
%%如,假设图像尺寸M*N,则左下角点坐标为(M,1),而Matlab的figure显示为(1,M)
%expandTime   放大倍数
%w            框线的宽度
%framedim     画中画位置的选择参数
%             1---左上方
%             2---右上方
%             3---左下方
%             4---右下方
%输出图像
% imMod       画好了的图像
%----------------------------------------------------------------------

% 检查输入参数
if nargin < 7
    color = [255 255 0];  % 不设置框的颜色时,默认为黄色 
end

if nargin < 6
    framedim = 1; % 画中画位置,默认为1左上方
end

if nargin < 5
    lineSize = 1; % 不设置框的粗细时,默认为1
end

if nargin < 4
    expandTime = 1; % 不设置放大倍数时,默认为1
end

if nargin < 3
    disp('输入参数不够 !!!'); % 前三个参数必须给出
    return;
end

% 获取输入图像的尺寸
[yA, xA, z] = size(src); % 高度y  宽度x 维数 z
%判断框的边界问题
y1 = topLeft(1);
x1 = topLeft(2);
y2 = lowerRight(1);
x2 = lowerRight(2);
if  x1>xA || ...
        y1>yA||...
        x2>xA||...
        y2>yA
    disp('画的框超过图像 !!!');
    return;
end

% 计算框内图像放大后的尺寸
width = (x2 - x1) * expandTime;
hight = (y2 - y1) * expandTime;

% 确保放大倍数后的内容不超过图像尺寸
w1 = min(width, xA - 2 * w);
h1 = min(hight, yA - 2 * w);
% str = strcat('w1:', num2str(w1), ',h1:', num2str(h1));
% disp(str);

%如果是单通道的灰度图,转成3通道的图像
if 1==z
    imMod(:, : ,1) = src;
    imMod(:, : ,2) = src;
    imMod(:, : ,3) = src;
else
    imMod = src;
end

% 根据 framedim 参数确定画中画的位置
% framedRegion 中四个参数是 左上角 y x 右下角 y x
switch framedim
    case 1 % 左上方
        framedRegion = [1, 1, h1, w1];
    case 2 % 右上方
        framedRegion = [1, xA - w1 + 1, h1, xA];
    case 3 % 左下方
        framedRegion = [yA - h1 + 1, 1, yA, w1]; % h1-1, w1 - 1
    case 4 % 右下方
        framedRegion = [yA - h1 + 1, xA - w1 + 1, yA, xA]; % 
    otherwise
        disp('无效的 framedim 参数');
        return;
end


% 放大子图像
expandedRegion = imresize(imMod(y1:y2, x1:x2, :), [h1, w1]);
% disp(size(expandedRegion));


% 在放大后的区域上绘制放大的图像
imMod(framedRegion(1):framedRegion(3), framedRegion(2):framedRegion(4), :) = expandedRegion;

%画框图
for c = 1 : 3                 %3个通道,r,g,b分别画
    for dl = 1 : w   %线的宽度,线条是向外面扩展的
        d = dl - 1;
        imMod(  y1-d ,           (x1-d):(x2+d) ,  c  ) =  color(c); %上方线条
        imMod(  y2+d ,           (x1-d):(x2+d) ,  c  ) =  color(c); %下方线条
        imMod(  (y1-d):(y2+d) ,   x1-d ,          c  ) =  color(c); %左方线条
        imMod(  (y1-d):(y2+d) ,   x2+d ,          c  ) =  color(c); %左方线条
    end    
end 

end

参考:https://blog.csdn.net/fovever_/article/details/129178895
但是他的要钱😭😭😭
我就自己写的,所以可能会存在一些问题。
如果帮到你了 给我点个赞吧!!

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值