Octave中MATLAB imshowpair函数的替代方案查询
Octave中imshowpair的替代实现方案
当前Octave Forge的image包确实暂未实现imshowpair函数,针对你代码中使用的'montage'拼接展示场景,以及通用的功能需求,可以用以下方案解决:
1. 针对当前代码的快速替换方案
你代码中的imshowpair(L8,RGBLabel,'montage');可以直接替换为下面几行,实现完全一致的并排展示效果:
% 替代imshowpair的montage模式 % 先将单通道标签矩阵转为3通道RGB格式,和RGBLabel维度匹配 L8_rgb = label2rgb(L8); % 横向拼接两张图像 montage_img = horzcat(L8_rgb, RGBLabel); % 展示拼接结果 imshow(montage_img);
替换后的完整可运行代码如下:
close all clear clc i=imread('1.jpg'); BW=im2bw(i); figure; imshow(BW); title('Binary image') x=input("Enter whatever u want") cc8=bwconncomp(BW,x); L8=labelmatrix(cc8); RGBLabel=label2rgb(L8,'jet','k','shuffle'); figure % 以下为imshowpair替换代码 L8_rgb = label2rgb(L8); montage_img = horzcat(L8_rgb, RGBLabel); imshow(montage_img); % 替换代码结束 title(['lable img with ',int2str(x),'connctivity']); imwrite(RGBLabel,'label.png');
2. 通用imshowpair简易封装
如果需要兼容更多imshowpair的常用展示模式(blend、falsecolor等),可以自己封装一个同名函数,保存为imshowpair.m放在工作目录下即可直接调用,和MATLAB常用用法兼容:
function imshowpair(img1, img2, mode, varargin) % Octave简易版imshowpair,支持montage、blend、falsecolor三种常用模式 % 统一将输入图像转为uint8 3通道格式的工具函数 function rgb = to_rgb(img) if size(img,3) == 1 rgb = repmat(im2uint8(img), [1 1 3]); else rgb = im2uint8(img); end end img1_rgb = to_rgb(img1); img2_rgb = to_rgb(img2); if nargin <3 mode = 'montage'; end switch lower(mode) case 'montage' out = horzcat(img1_rgb, img2_rgb); imshow(out); case 'blend' alpha = 0.5; if length(varargin)>=2 && strcmpi(varargin{1}, 'alpha') alpha = varargin{2}; end out = im2double(img1_rgb)*alpha + im2double(img2_rgb)*(1-alpha); imshow(out); case 'falsecolor' out = cat(3, img1_rgb(:,:,1), img2_rgb(:,:,1), zeros(size(img1,1), size(img1,2), 'uint8')); imshow(out); otherwise error('当前仅支持montage、blend、falsecolor三种展示模式'); end end
内容的提问来源于stack exchange,提问作者Zaman
相关产品推荐
相关产品推荐

