How do I perform image difference Between 2 images and extract difference ??
5 次查看(过去 30 天)
显示 更早的评论
Hello, I will like to use apply the code found https://www.mathworks.com/matlabcentral/answers/276217-write-an-image-name-to-particular-folder-using-imwrite to perform image difference between 2 Grayscale images. First to read images from it's folders, resize them and lastly write results with it's real name to a specific folder. I tried the code below but when i imshow difference_image, the results are different (Dark) from the usual results (Gray) I get using codes from https://www.mathworks.com/matlabcentral/answers/259045-difference-between-2-image-and-exctrat-difference. Please find attached. Can anyone explain the reasons ?
%% Showing difference of image
% Have user browse for a file, from a specified "starting folder."
% For convenience in browsing, set a starting folder from which to browse.
startingFolder = pwd; % or 'C:\Program Files\MATLAB' or wherever...
if ~exist(startingFolder, 'dir')
% If that folder doesn't exist, just start in the current folder.
startingFolder = pwd;
end
% Get the name of the file that the user wants to use.
defaultFileName1 = fullfile(startingFolder, '*.*');
[baseFileName1, folder1] = uigetfile(defaultFileName1, 'Select Bicubic file');
defaultFileName2 = fullfile(startingFolder, '*.*');
[baseFileName2, folder2] = uigetfile(defaultFileName2, 'Select Other method file');
if baseFileName1 == 0
% User clicked the Cancel button.
return;
end
fullSourceFileName1 = fullfile(folder1, baseFileName1)
if baseFileName2 == 0
% User clicked the Cancel button.
return;
end
fullSourceFileName2 = fullfile(folder2, baseFileName2)
% Read images to be differenced from source file names
firstImage = imread(fullSourceFileName1);
secondImage = imread(fullSourceFileName2);
% Resize images
firstImageresize = (imresize(firstImage, [504, 504])); % Bicubic Method
secondImageresize = (imresize(secondImage, [504, 504])); % Methods to compare
% Image difference
difference_image = double(secondImageresize) - double(firstImageresize);
imshow(difference_image)
% Saving results
% Create destination filename
destinationFolder = 'C:/Set5 [X2]';
if ~exist(destinationFolder, 'dir')
mkdir(destinationFolder);
end
% Strip off extenstion from input file
[sourceFolder, baseFileNameNoExtenstion, ext] = fileparts(fullSourceFileName1);
% Create jpeg filename. Don't use jpeg format for image analysis!
outputBaseName = [baseFileNameNoExtenstion, '.JPG']
fullDestinationFileName = fullfile(destinationFolder, outputBaseName);
% Write the jpg file. This will convert whatever format you started with to the hated jpg format.
imwrite(difference_image, fullDestinationFileName);
Thanks
0 个评论
采纳的回答
Image Analyst
2018-11-18
To display properly, do this
imshow(difference_image, [])
DO NOT save as a jpg file! Save with the extension PNG.
outputBaseName = [baseFileNameNoExtenstion, '.PNG']
To save as a standard image, first convert to uint8
uint8Image = uint8(255 * mat2gray(difference_image));
imwrite(uint8Image, fullDestinationFileName
or else leave as double and save in a .mat file
3 个评论
Image Analyst
2018-11-19
You could save in BMP - it's also a lossless way because it's uncompressed. But it atkes up more space and CPUs these days are much faster than disk IO so it's faster to compress and save than to save uncompressed. In addition, I think BMP is primarily a Windows format. PNG is pretty much a de facto standard now.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Image Processing Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!