How to do 2D Image Processing?

10 views (last 30 days)
Joshua
Joshua about 16 hours ago
Edited: Image Analyst about 8 hours ago
Example
  2 Comments
Joshua
Joshua 2 minutes ago
%% =========================
% [3.1] Load and display image
% =========================
imOriginal = imread("Section3.png");
figure;
imshow(imOriginal);
title("Original MRI Image");
% If image is RGB, convert to grayscale (usually this file is already grayscale)
if ndims(imOriginal) == 3
imOriginal = rgb2gray(imOriginal);
end
%% =========================
% [3.1] Remove salt-and-pepper noise using median filter
% =========================
imMed = medfilt2(imOriginal); % 2D median filter
figure;
imshowpair(imOriginal, imMed, "montage", "scaling", "none");
title("Original (left) vs Median Filtered (right)");
%% =========================
% [3.1] Compare with averaging filter (why median works better for S&P noise)
% =========================
avgFilt = (1/9) * ones(3,3);
% filter2 returns double, so cast back for display if needed
imAvg = filter2(avgFilt, imOriginal);
imAvg = uint8(imAvg);
figure;
imshowpair(imOriginal, imAvg, "montage", "scaling", "none");
title("Original (left) vs Averaging Filter (right)");
%% =========================
% [3.1] Histogram of median-filtered image
% Lab says use median-filtered output for intensity analysis
% =========================
figure;
imhist(imMed);
title("Histogram of Median-Filtered Image");
%% =========================
% [3.1] Create logical mask for NON-background pixels
% Black background pixel value = 0 (for uint8 grayscale)
% =========================
logicArr = (imMed ~= 0); % 1 = non-background, 0 = black background
%% =========================
% [3.1] Contrast adjustment using ONLY non-background pixels
% Steps:
% 1) extract non-background pixels
% 2) compute intensity limits from those pixels
% 3) use imadjust on the whole image with those limits
% =========================
nonBgPixels = imMed(logicArr);
% Simple version (directly from image values)
inLow = double(min(nonBgPixels)) / 255;
inHigh = double(max(nonBgPixels)) / 255;
% Optional better version (more robust to outliers):
% pr = prctile(nonBgPixels, [1 99]);
% inLow = double(pr(1))/255;
% inHigh = double(pr(2))/255;
% Contrast-adjust image
imAdj = imadjust(imMed, [inLow inHigh], []);
%% Histogram after adjustment (should use more of the intensity range)
figure;
imhist(imAdj);
title("Histogram After Contrast Adjustment");
%% =========================
% [3.1] Final comparison: original vs median-filtered + contrast-adjusted
% =========================
figure;
imshowpair(imOriginal, imAdj, "montage", "scaling", "none");
title("Original (left) vs Median Filtered + Contrast Adjusted (right)");
Mathieu NOE
Mathieu NOE 3 minutes ago
again, what is your question ?

Sign in to comment.

Answers (1)

Image Analyst
Image Analyst 3 minutes ago
Edited: Image Analyst 1 minute ago
For some examples, see my File Exchange:
especially the Image Segmentation Tutorial submission.
And see my attached salt and pepper noise removal demos.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!